Source
int zbx_mem_create(zbx_mem_info_t **info, zbx_uint64_t size, const char *descr, const char *param, int allow_oom,
/*
** Zabbix
** Copyright (C) 2001-2022 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
/* should be a multiple of 8 and at least (2 * ZBX_PTR_SIZE) */
/* starting from this size all free chunks are put into the same bucket */
typedef struct
{
void **buckets;
void *lo_bound;
void *hi_bound;
zbx_uint64_t free_size;
zbx_uint64_t used_size;
zbx_uint64_t orig_size;
zbx_uint64_t total_size;
int shm_id;
/* Continue execution in out of memory situation. */
/* Normally allocator forces exit when it runs out of allocatable memory. */
/* Set this flag to 1 to allow execution in out of memory situations. */
char allow_oom;
const char *mem_descr;
const char *mem_param;
}
zbx_mem_info_t;
typedef struct
{
zbx_uint64_t free_size;
zbx_uint64_t used_size;
zbx_uint64_t min_chunk_size;
zbx_uint64_t max_chunk_size;
zbx_uint64_t overhead;
unsigned int chunks_num[MEM_BUCKET_COUNT];
unsigned int free_chunks;
unsigned int used_chunks;
}