Scippy

SCIP

Solving Constraint Integer Programs

memory.c File Reference

Detailed Description

memory allocation routines

Author
Tobias Achterberg
Gerald Gamrath
Marc Pfetsch
Jakob Witzig

Definition in file memory.c.

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdint.h>
#include "blockmemshell/memory.h"
#include "scip/rbtree.h"

Go to the source code of this file.

Macros

#define debugMessage   SCIPdebugMessage
 
#define errorMessage   SCIPerrorMessage
 
#define warningMessage   printf
 
#define printInfo   printf
 
#define LONGINT_FORMAT   SCIP_LONGINT_FORMAT
 
#define MAXMEMSIZE   SCIP_MAXMEMSIZE
 
#define CHKHASH_POWER   10
 
#define CHKHASH_SIZE   (1<<CHKHASH_POWER)
 
#define CHUNKLENGTH_MIN   1024
 
#define CHUNKLENGTH_MAX   1048576
 
#define STORESIZE_MAX   8192
 
#define GARBAGE_SIZE   256
 
#define ALIGNMENT   (sizeof(FREELIST))
 
#define CHUNK_LT(ptr, chunk)   ptr < chunk->store
 
#define CHUNK_GT(ptr, chunk)   ptr >= chunk->storeend
 
#define checkChunk(chunk)
 
#define checkChkmem(chkmem)
 
#define checkBlkmem(blkmem)
 

Typedefs

typedef struct Freelist FREELIST
 
typedef struct Chunk CHUNK
 

Functions

size_t BMSgetPointerSize_call (const void *ptr)
 
void BMSdisplayMemory_call (void)
 
void BMScheckEmptyMemory_call (void)
 
long long BMSgetMemoryUsed_call (void)
 
void * BMSallocClearMemory_call (size_t num, size_t typesize, const char *filename, int line)
 
void * BMSallocMemory_call (size_t size, const char *filename, int line)
 
void * BMSallocMemoryArray_call (size_t num, size_t typesize, const char *filename, int line)
 
void * BMSreallocMemory_call (void *ptr, size_t size, const char *filename, int line)
 
void * BMSreallocMemoryArray_call (void *ptr, size_t num, size_t typesize, const char *filename, int line)
 
void BMSclearMemory_call (void *ptr, size_t size)
 
void BMScopyMemory_call (void *ptr, const void *source, size_t size)
 
void BMSmoveMemory_call (void *ptr, const void *source, size_t size)
 
void * BMSduplicateMemory_call (const void *source, size_t size, const char *filename, int line)
 
void * BMSduplicateMemoryArray_call (const void *source, size_t num, size_t typesize, const char *filename, int line)
 
void BMSfreeMemory_call (void **ptr, const char *filename, int line)
 
void BMSfreeMemoryNull_call (void **ptr, const char *filename, int line)
 
static SCIP_DEF_RBTREE_FIND (rbTreeFindChunk, const void *, CHUNK, CHUNK_LT, CHUNK_GT)
 
void BMSalignMemsize (size_t *size)
 
int BMSisAligned (size_t size)
 
static int isPtrInChunk (const CHUNK *chunk, const void *ptr)
 
static CHUNKfindChunk (const BMS_CHKMEM *chkmem, const void *ptr)
 
static int isPtrInChkmem (const BMS_CHKMEM *chkmem, const void *ptr)
 
static int linkChunk (BMS_CHKMEM *chkmem, CHUNK *chunk)
 
static void unlinkChunk (CHUNK *chunk)
 
static void linkEagerChunk (BMS_CHKMEM *chkmem, CHUNK *chunk)
 
static void unlinkEagerChunk (CHUNK *chunk)
 
static int createChunk (BMS_CHKMEM *chkmem, long long *memsize)
 
static void destroyChunk (CHUNK *chunk, long long *memsize)
 
static void freeChunk (CHUNK *chunk, long long *memsize)
 
static void * allocChunkElement (CHUNK *chunk)
 
static void freeChunkElement (CHUNK *chunk, void *ptr)
 
static BMS_CHKMEMcreateChkmem (int size, int initchunksize, int garbagefactor, long long *memsize)
 
static void clearChkmem (BMS_CHKMEM *chkmem, long long *memsize)
 
static void destroyChkmem (BMS_CHKMEM **chkmem, long long *memsize)
 
static void * allocChkmemElement (BMS_CHKMEM *chkmem, long long *memsize)
 
static void garbagecollectChkmem (BMS_CHKMEM *chkmem, long long *memsize)
 
static void freeChkmemElement (BMS_CHKMEM *chkmem, void *ptr, long long *memsize, const char *filename, int line)
 
BMS_CHKMEMBMScreateChunkMemory_call (size_t size, int initchunksize, int garbagefactor, const char *filename, int line)
 
void BMSclearChunkMemory_call (BMS_CHKMEM *chkmem, const char *filename, int line)
 
void BMSdestroyChunkMemory_call (BMS_CHKMEM **chkmem, const char *filename, int line)
 
void * BMSallocChunkMemory_call (BMS_CHKMEM *chkmem, size_t size, const char *filename, int line)
 
void * BMSduplicateChunkMemory_call (BMS_CHKMEM *chkmem, const void *source, size_t size, const char *filename, int line)
 
void BMSfreeChunkMemory_call (BMS_CHKMEM *chkmem, void **ptr, size_t size, const char *filename, int line)
 
void BMSfreeChunkMemoryNull_call (BMS_CHKMEM *chkmem, void **ptr, size_t size, const char *filename, int line)
 
void BMSgarbagecollectChunkMemory_call (BMS_CHKMEM *chkmem)
 
long long BMSgetChunkMemoryUsed_call (const BMS_CHKMEM *chkmem)
 
static BMS_CHKMEMfindChkmem (const BMS_BLKMEM *blkmem, const void *ptr)
 
static int getHashNumber (int size)
 
BMS_BLKMEMBMScreateBlockMemory_call (int initchunksize, int garbagefactor, const char *filename, int line)
 
void BMSclearBlockMemory_call (BMS_BLKMEM *blkmem, const char *filename, int line)
 
void BMSdestroyBlockMemory_call (BMS_BLKMEM **blkmem, const char *filename, int line)
 
static INLINE void * BMSallocBlockMemory_work (BMS_BLKMEM *blkmem, size_t size, const char *filename, int line)
 
void * BMSallocBlockMemory_call (BMS_BLKMEM *blkmem, size_t size, const char *filename, int line)
 
void * BMSallocBlockMemoryArray_call (BMS_BLKMEM *blkmem, size_t num, size_t typesize, const char *filename, int line)
 
void * BMSallocClearBlockMemoryArray_call (BMS_BLKMEM *blkmem, size_t num, size_t typesize, const char *filename, int line)
 
void * BMSreallocBlockMemory_call (BMS_BLKMEM *blkmem, void *ptr, size_t oldsize, size_t newsize, const char *filename, int line)
 
void * BMSreallocBlockMemoryArray_call (BMS_BLKMEM *blkmem, void *ptr, size_t oldnum, size_t newnum, size_t typesize, const char *filename, int line)
 
void * BMSduplicateBlockMemory_call (BMS_BLKMEM *blkmem, const void *source, size_t size, const char *filename, int line)
 
void * BMSduplicateBlockMemoryArray_call (BMS_BLKMEM *blkmem, const void *source, size_t num, size_t typesize, const char *filename, int line)
 
static INLINE void BMSfreeBlockMemory_work (BMS_BLKMEM *blkmem, void **ptr, size_t size, const char *filename, int line)
 
void BMSfreeBlockMemory_call (BMS_BLKMEM *blkmem, void **ptr, size_t size, const char *filename, int line)
 
void BMSfreeBlockMemoryNull_call (BMS_BLKMEM *blkmem, void **ptr, size_t size, const char *filename, int line)
 
void BMSgarbagecollectBlockMemory_call (BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryAllocated_call (const BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryUsed_call (const BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryUnused_call (const BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryUsedMax_call (const BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryUnusedMax_call (const BMS_BLKMEM *blkmem)
 
long long BMSgetBlockMemoryAllocatedMax_call (const BMS_BLKMEM *blkmem)
 
size_t BMSgetBlockPointerSize_call (const BMS_BLKMEM *blkmem, const void *ptr)
 
void BMSdisplayBlockMemory_call (const BMS_BLKMEM *blkmem)
 
long long BMScheckEmptyBlockMemory_call (const BMS_BLKMEM *blkmem)
 
BMS_BUFMEMBMScreateBufferMemory_call (double arraygrowfac, int arraygrowinit, unsigned int clean, const char *filename, int line)
 
void BMSdestroyBufferMemory_call (BMS_BUFMEM **buffer, const char *filename, int line)
 
void BMSsetBufferMemoryArraygrowfac (BMS_BUFMEM *buffer, double arraygrowfac)
 
void BMSsetBufferMemoryArraygrowinit (BMS_BUFMEM *buffer, int arraygrowinit)
 
static size_t calcMemoryGrowSize (size_t initsize, SCIP_Real growfac, size_t num)
 
static INLINE void * BMSallocBufferMemory_work (BMS_BUFMEM *buffer, size_t size, const char *filename, int line)
 
void * BMSallocBufferMemory_call (BMS_BUFMEM *buffer, size_t size, const char *filename, int line)
 
void * BMSallocBufferMemoryArray_call (BMS_BUFMEM *buffer, size_t num, size_t typesize, const char *filename, int line)
 
void * BMSallocClearBufferMemoryArray_call (BMS_BUFMEM *buffer, size_t num, size_t typesize, const char *filename, int line)
 
static INLINE void * BMSreallocBufferMemory_work (BMS_BUFMEM *buffer, void *ptr, size_t size, const char *filename, int line)
 
void * BMSreallocBufferMemory_call (BMS_BUFMEM *buffer, void *ptr, size_t size, const char *filename, int line)
 
void * BMSreallocBufferMemoryArray_call (BMS_BUFMEM *buffer, void *ptr, size_t num, size_t typesize, const char *filename, int line)
 
void * BMSduplicateBufferMemory_call (BMS_BUFMEM *buffer, const void *source, size_t size, const char *filename, int line)
 
void * BMSduplicateBufferMemoryArray_call (BMS_BUFMEM *buffer, const void *source, size_t num, size_t typesize, const char *filename, int line)
 
static INLINE void BMSfreeBufferMemory_work (BMS_BUFMEM *buffer, void **ptr, const char *filename, int line)
 
void BMSfreeBufferMemory_call (BMS_BUFMEM *buffer, void **ptr, const char *filename, int line)
 
void BMSfreeBufferMemoryNull_call (BMS_BUFMEM *buffer, void **ptr, const char *filename, int line)
 
size_t BMSgetNUsedBufferMemory (BMS_BUFMEM *buffer)
 
long long BMSgetBufferMemoryUsed (const BMS_BUFMEM *buffer)
 
void BMSprintBufferMemory (BMS_BUFMEM *buffer)
 

Macro Definition Documentation

◆ debugMessage

◆ errorMessage

#define errorMessage   SCIPerrorMessage

Definition at line 58 of file memory.c.

Referenced by BMScheckEmptyBlockMemory_call(), and garbagecollectChkmem().

◆ warningMessage

#define warningMessage   printf

Definition at line 66 of file memory.c.

Referenced by BMSfreeBufferMemory_work().

◆ printInfo

#define printInfo   printf

◆ LONGINT_FORMAT

#define LONGINT_FORMAT   SCIP_LONGINT_FORMAT

Definition at line 86 of file memory.c.

Referenced by BMScheckEmptyBlockMemory_call(), and BMSdisplayBlockMemory_call().

◆ MAXMEMSIZE

◆ CHKHASH_POWER

#define CHKHASH_POWER   10

power for size of chunk block hash table

Definition at line 651 of file memory.c.

Referenced by getHashNumber().

◆ CHKHASH_SIZE

#define CHKHASH_SIZE   (1<<CHKHASH_POWER)

◆ CHUNKLENGTH_MIN

#define CHUNKLENGTH_MIN   1024

minimal size of a chunk (in bytes)

Definition at line 679 of file memory.c.

Referenced by createChunk().

◆ CHUNKLENGTH_MAX

#define CHUNKLENGTH_MAX   1048576

maximal size of a chunk (in bytes)

Definition at line 680 of file memory.c.

Referenced by createChunk().

◆ STORESIZE_MAX

#define STORESIZE_MAX   8192

maximal number of elements in one chunk

Definition at line 681 of file memory.c.

Referenced by createChunk().

◆ GARBAGE_SIZE

#define GARBAGE_SIZE   256

size of lazy free list to start garbage collection

Definition at line 682 of file memory.c.

Referenced by freeChkmemElement().

◆ ALIGNMENT

#define ALIGNMENT   (sizeof(FREELIST))

minimal alignment of chunks

Definition at line 683 of file memory.c.

Referenced by BMSalignMemsize(), BMSisAligned(), and SCIP_DEF_RBTREE_FIND().

◆ CHUNK_LT

#define CHUNK_LT (   ptr,
  chunk 
)    ptr < chunk->store

Definition at line 734 of file memory.c.

◆ CHUNK_GT

#define CHUNK_GT (   ptr,
  chunk 
)    ptr >= chunk->storeend

Definition at line 735 of file memory.c.

◆ checkChunk

#define checkChunk (   chunk)

Definition at line 911 of file memory.c.

Referenced by allocChunkElement(), freeChunkElement(), and isPtrInChkmem().

◆ checkChkmem

◆ checkBlkmem

Typedef Documentation

◆ FREELIST

typedef struct Freelist FREELIST

linked list of free memory elements

Definition at line 685 of file memory.c.

◆ CHUNK

typedef struct Chunk CHUNK

chunk of memory elements

Definition at line 686 of file memory.c.

Function Documentation

◆ BMSgetPointerSize_call()

size_t BMSgetPointerSize_call ( const void *  ptr)

returns the size of an allocated memory element

Parameters
ptrpointer to allocated memory

Definition at line 282 of file memory.c.

◆ BMSdisplayMemory_call()

void BMSdisplayMemory_call ( void  )

outputs information about currently allocated memory to the screen

Definition at line 290 of file memory.c.

References printInfo.

◆ BMScheckEmptyMemory_call()

void BMScheckEmptyMemory_call ( void  )

displays a warning message on the screen, if allocated memory exists

Definition at line 300 of file memory.c.

References printInfo.

◆ BMSgetMemoryUsed_call()

long long BMSgetMemoryUsed_call ( void  )

returns total number of allocated bytes

Definition at line 310 of file memory.c.

◆ BMSallocClearMemory_call()

void* BMSallocClearMemory_call ( size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates array and initializes it with 0; returns NULL if memory allocation failed

Parameters
numnumber of memory element to allocate
typesizesize of one memory element to allocate
filenamesource file where the allocation is performed
lineline number in source file where the allocation is performed

Definition at line 320 of file memory.c.

References debugMessage, MAX, MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSallocMemory_call()

void* BMSallocMemory_call ( size_t  size,
const char *  filename,
int  line 
)

allocates memory; returns NULL if memory allocation failed

Parameters
sizesize of memory element to allocate
filenamesource file where the allocation is performed
lineline number in source file where the allocation is performed

Definition at line 361 of file memory.c.

References debugMessage, MAX, MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSduplicateMemory_call().

◆ BMSallocMemoryArray_call()

void* BMSallocMemoryArray_call ( size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates array; returns NULL if memory allocation failed

Parameters
numnumber of components of array to allocate
typesizesize of each component
filenamesource file where the allocation is performed
lineline number in source file where the allocation is performed

Definition at line 397 of file memory.c.

References debugMessage, MAX, MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSduplicateMemoryArray_call().

◆ BMSreallocMemory_call()

void* BMSreallocMemory_call ( void *  ptr,
size_t  size,
const char *  filename,
int  line 
)

allocates memory; returns NULL if memory allocation failed

Parameters
ptrpointer to memory to reallocate
sizenew size of memory element
filenamesource file where the reallocation is performed
lineline number in source file where the reallocation is performed

Definition at line 437 of file memory.c.

References MAX, MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSreallocMemoryArray_call()

void* BMSreallocMemoryArray_call ( void *  ptr,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

reallocates array; returns NULL if memory allocation failed

Parameters
ptrpointer to memory to reallocate
numnumber of components of array to allocate
typesizesize of each component
filenamesource file where the reallocation is performed
lineline number in source file where the reallocation is performed

Definition at line 477 of file memory.c.

References MAX, MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSclearMemory_call()

void BMSclearMemory_call ( void *  ptr,
size_t  size 
)

clears a memory element (i.e. fills it with zeros)

Parameters
ptrpointer to memory element
sizesize of memory element

Definition at line 520 of file memory.c.

◆ BMScopyMemory_call()

void BMScopyMemory_call ( void *  ptr,
const void *  source,
size_t  size 
)

copies the contents of one memory element into another memory element

Parameters
ptrpointer to target memory element
sourcepointer to source memory element
sizesize of memory element to copy

Definition at line 533 of file memory.c.

Referenced by BMSduplicateMemory_call(), and BMSduplicateMemoryArray_call().

◆ BMSmoveMemory_call()

void BMSmoveMemory_call ( void *  ptr,
const void *  source,
size_t  size 
)

moves the contents of one memory element into another memory element, should be used if both elements overlap, otherwise BMScopyMemory is faster

Parameters
ptrpointer to target memory element
sourcepointer to source memory element
sizesize of memory element to copy

Definition at line 550 of file memory.c.

◆ BMSduplicateMemory_call()

void* BMSduplicateMemory_call ( const void *  source,
size_t  size,
const char *  filename,
int  line 
)

allocates memory and copies the contents of the given memory element into the new memory element

Parameters
sourcepointer to source memory element
sizesize of memory element to copy
filenamesource file where the duplication is performed
lineline number in source file where the duplication is performed

Definition at line 565 of file memory.c.

References BMSallocMemory_call(), and BMScopyMemory_call().

◆ BMSduplicateMemoryArray_call()

void* BMSduplicateMemoryArray_call ( const void *  source,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates array and copies the contents of the given source array into the new array

Parameters
sourcepointer to source memory element
numnumber of components of array to allocate
typesizesize of each component
filenamesource file where the duplication is performed
lineline number in source file where the duplication is performed

Definition at line 584 of file memory.c.

References BMSallocMemoryArray_call(), and BMScopyMemory_call().

◆ BMSfreeMemory_call()

void BMSfreeMemory_call ( void **  ptr,
const char *  filename,
int  line 
)

frees an allocated memory element and sets pointer to NULL

Parameters
ptrpointer to pointer to memory element
filenamesource file where the deallocation is performed
lineline number in source file where the deallocation is performed

Definition at line 604 of file memory.c.

References printError, and printErrorHeader.

◆ BMSfreeMemoryNull_call()

void BMSfreeMemoryNull_call ( void **  ptr,
const char *  filename,
int  line 
)

frees an allocated memory element if pointer is not NULL and sets pointer to NULL

Parameters
ptrpointer to pointer to memory element
filenamesource file where the deallocation is performed
lineline number in source file where the deallocation is performed

Definition at line 627 of file memory.c.

◆ SCIP_DEF_RBTREE_FIND()

static SCIP_DEF_RBTREE_FIND ( rbTreeFindChunk  ,
const void *  ,
CHUNK  ,
CHUNK_LT  ,
CHUNK_GT   
)
static

aligns the given byte size corresponding to the minimal alignment pointer to the size to align

Definition at line 738 of file memory.c.

References ALIGNMENT.

◆ BMSalignMemsize()

void BMSalignMemsize ( size_t *  size)

aligns the given byte size corresponding to the minimal alignment for chunk and block memory

Parameters
sizepointer to the size to align

Definition at line 754 of file memory.c.

References ALIGNMENT.

◆ BMSisAligned()

int BMSisAligned ( size_t  size)

checks whether the given size meets the alignment conditions for chunk and block memory

Parameters
sizesize to check for alignment

Definition at line 763 of file memory.c.

References ALIGNMENT.

Referenced by createChkmem(), createChunk(), and getHashNumber().

◆ isPtrInChunk()

static int isPtrInChunk ( const CHUNK chunk,
const void *  ptr 
)
static

checks, if the given pointer belongs to the given chunk

Parameters
chunkmemory chunk
ptrpointer

Definition at line 774 of file memory.c.

Referenced by freeChunkElement(), and isPtrInChkmem().

◆ findChunk()

static CHUNK* findChunk ( const BMS_CHKMEM chkmem,
const void *  ptr 
)
static

given a pointer, finds the chunk this pointer points to in the chunk array of the given chunk block; binary search is used; returns NULL if the pointer does not belong to the chunk block

Parameters
chkmemchunk block
ptrpointer

Definition at line 791 of file memory.c.

Referenced by garbagecollectChkmem(), and isPtrInChkmem().

◆ isPtrInChkmem()

static int isPtrInChkmem ( const BMS_CHKMEM chkmem,
const void *  ptr 
)
static

checks, if a pointer belongs to a chunk of the given chunk block

Parameters
chkmemchunk block
ptrpointer

Definition at line 810 of file memory.c.

References checkChkmem, checkChunk, findChunk(), FOR_EACH_NODE, and isPtrInChunk().

Referenced by findChkmem(), and freeChkmemElement().

◆ linkChunk()

static int linkChunk ( BMS_CHKMEM chkmem,
CHUNK chunk 
)
static

links chunk to the block's chunk array, sort it by store pointer; returns TRUE if successful, FALSE otherwise

Parameters
chkmemchunk block
chunkmemory chunk

Definition at line 920 of file memory.c.

References debugMessage, SCIPrbtreeInsert, and TRUE.

Referenced by createChunk().

◆ unlinkChunk()

static void unlinkChunk ( CHUNK chunk)
static

unlinks chunk from the chunk block's chunk list

Parameters
chunkmemory chunk

Definition at line 948 of file memory.c.

References debugMessage, and SCIPrbtreeDelete.

Referenced by freeChunk().

◆ linkEagerChunk()

static void linkEagerChunk ( BMS_CHKMEM chkmem,
CHUNK chunk 
)
static

links chunk to the chunk block's eager chunk list

Parameters
chkmemchunk block
chunkmemory chunk

Definition at line 975 of file memory.c.

Referenced by freeChunkElement().

◆ unlinkEagerChunk()

static void unlinkEagerChunk ( CHUNK chunk)
static

unlinks chunk from the chunk block's eager chunk list

Parameters
chunkmemory chunk

Definition at line 996 of file memory.c.

Referenced by allocChunkElement(), and freeChunk().

◆ createChunk()

static int createChunk ( BMS_CHKMEM chkmem,
long long *  memsize 
)
static

creates a new memory chunk in the given chunk block and adds memory elements to the lazy free list; returns TRUE if successful, FALSE otherwise

Parameters
chkmemchunk block
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1021 of file memory.c.

References BMSallocMemorySize, BMSisAligned(), checkChkmem, CHUNKLENGTH_MAX, CHUNKLENGTH_MIN, debugMessage, FALSE, linkChunk(), MAX, MAXMEMSIZE, and STORESIZE_MAX.

Referenced by allocChkmemElement().

◆ destroyChunk()

static void destroyChunk ( CHUNK chunk,
long long *  memsize 
)
static

destroys a chunk without updating the chunk lists

Parameters
chunkmemory chunk
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1096 of file memory.c.

References BMSfreeMemory, and debugMessage.

Referenced by freeChunk().

◆ freeChunk()

static void freeChunk ( CHUNK chunk,
long long *  memsize 
)
static

removes a completely unused chunk, i.e. a chunk with all elements in the eager free list

Parameters
chunkmemory chunk
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1114 of file memory.c.

References debugMessage, destroyChunk(), unlinkChunk(), and unlinkEagerChunk().

Referenced by garbagecollectChkmem().

◆ allocChunkElement()

static void* allocChunkElement ( CHUNK chunk)
static

returns an element of the eager free list and removes it from the list

Parameters
chunkmemory chunk

Definition at line 1145 of file memory.c.

References checkChunk, debugMessage, and unlinkEagerChunk().

Referenced by allocChkmemElement().

◆ freeChunkElement()

static void freeChunkElement ( CHUNK chunk,
void *  ptr 
)
static

puts given pointer into the eager free list and adds the chunk to the eager list of its chunk block, if necessary

Parameters
chunkmemory chunk
ptrpointer

Definition at line 1182 of file memory.c.

References checkChunk, debugMessage, isPtrInChunk(), and linkEagerChunk().

Referenced by garbagecollectChkmem().

◆ createChkmem()

static BMS_CHKMEM* createChkmem ( int  size,
int  initchunksize,
int  garbagefactor,
long long *  memsize 
)
static

creates a new chunk block data structure

Parameters
sizeelement size of the chunk block
initchunksizenumber of elements in the first chunk of the chunk block
garbagefactorgarbage collector is called, if at least garbagefactor * avg. chunksize elements are free (-1: disable garbage collection)
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1211 of file memory.c.

References BMSallocMemory, and BMSisAligned().

Referenced by BMSallocBlockMemory_work(), and BMScreateChunkMemory_call().

◆ clearChkmem()

static void clearChkmem ( BMS_CHKMEM chkmem,
long long *  memsize 
)
static

destroys all chunks of the chunk block, but keeps the chunk block header structure

Parameters
chkmemchunk block
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1255 of file memory.c.

References FOR_EACH_NODE.

Referenced by BMSclearChunkMemory_call(), destroyChkmem(), and garbagecollectChkmem().

◆ destroyChkmem()

static void destroyChkmem ( BMS_CHKMEM **  chkmem,
long long *  memsize 
)
static

deletes chunk block and frees all associated memory chunks

Parameters
chkmempointer to chunk block
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1280 of file memory.c.

References BMSfreeMemory, BMSfreeMemoryArrayNull, and clearChkmem().

Referenced by BMSclearBlockMemory_call(), BMSdestroyChunkMemory_call(), and BMSgarbagecollectBlockMemory_call().

◆ allocChkmemElement()

static void* allocChkmemElement ( BMS_CHKMEM chkmem,
long long *  memsize 
)
static

allocates a new memory element from the chunk block

Parameters
chkmemchunk block
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1302 of file memory.c.

References allocChunkElement(), checkChkmem, and createChunk().

Referenced by BMSallocBlockMemory_work(), and BMSallocChunkMemory_call().

◆ garbagecollectChkmem()

static void garbagecollectChkmem ( BMS_CHKMEM chkmem,
long long *  memsize 
)
static

sorts the lazy free list of the chunk block into the eager free lists of the chunks, and removes completely unused chunks

Parameters
chkmemchunk block
memsizepointer to total size of allocated memory (or NULL)

Definition at line 1342 of file memory.c.

References checkChkmem, clearChkmem(), debugMessage, errorMessage, findChunk(), freeChunk(), and freeChunkElement().

Referenced by BMSgarbagecollectBlockMemory_call(), BMSgarbagecollectChunkMemory_call(), and freeChkmemElement().

◆ freeChkmemElement()

static void freeChkmemElement ( BMS_CHKMEM chkmem,
void *  ptr,
long long *  memsize,
const char *  filename,
int  line 
)
static

frees a memory element and returns it to the lazy freelist of the chunk block

Parameters
chkmemchunk block
ptrmemory element
memsizepointer to total size of allocated memory (or NULL)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1410 of file memory.c.

References checkChkmem, GARBAGE_SIZE, garbagecollectChkmem(), isPtrInChkmem(), printError, and printErrorHeader.

Referenced by BMSfreeBlockMemory_work(), BMSfreeChunkMemory_call(), and BMSfreeChunkMemoryNull_call().

◆ BMScreateChunkMemory_call()

BMS_CHKMEM* BMScreateChunkMemory_call ( size_t  size,
int  initchunksize,
int  garbagefactor,
const char *  filename,
int  line 
)

creates a new chunk block data structure

Parameters
sizeelement size of the chunk block
initchunksizenumber of elements in the first chunk of the chunk block
garbagefactorgarbage collector is called, if at least garbagefactor * avg. chunksize elements are free (-1: disable garbage collection)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1447 of file memory.c.

References createChkmem(), debugMessage, printError, and printErrorHeader.

◆ BMSclearChunkMemory_call()

void BMSclearChunkMemory_call ( BMS_CHKMEM chkmem,
const char *  filename,
int  line 
)

clears a chunk block data structure

Parameters
chkmemchunk block
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1471 of file memory.c.

References clearChkmem(), debugMessage, printError, and printErrorHeader.

◆ BMSdestroyChunkMemory_call()

void BMSdestroyChunkMemory_call ( BMS_CHKMEM **  chkmem,
const char *  filename,
int  line 
)

destroys and frees a chunk block data structure

Parameters
chkmempointer to chunk block
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1489 of file memory.c.

References debugMessage, destroyChkmem(), printError, and printErrorHeader.

◆ BMSallocChunkMemory_call()

void* BMSallocChunkMemory_call ( BMS_CHKMEM chkmem,
size_t  size,
const char *  filename,
int  line 
)

allocates a memory element of the given chunk block

Parameters
chkmemchunk block
sizesize of memory element to allocate (only needed for sanity check)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1509 of file memory.c.

References allocChkmemElement(), checkChkmem, debugMessage, printError, and printErrorHeader.

Referenced by BMSduplicateChunkMemory_call().

◆ BMSduplicateChunkMemory_call()

void* BMSduplicateChunkMemory_call ( BMS_CHKMEM chkmem,
const void *  source,
size_t  size,
const char *  filename,
int  line 
)

duplicates a given memory element by allocating a new element of the same chunk block and copying the data

Parameters
chkmemchunk block
sourcesource memory element
sizesize of memory element to allocate (only needed for sanity check)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1536 of file memory.c.

References BMSallocChunkMemory_call(), and BMScopyMemorySize.

◆ BMSfreeChunkMemory_call()

void BMSfreeChunkMemory_call ( BMS_CHKMEM chkmem,
void **  ptr,
size_t  size,
const char *  filename,
int  line 
)

frees a memory element of the given chunk block and sets pointer to NULL

Parameters
chkmemchunk block
ptrpointer to pointer to memory element to free
sizesize of memory element to allocate (only needed for sanity check)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1558 of file memory.c.

References checkChkmem, debugMessage, freeChkmemElement(), printError, and printErrorHeader.

◆ BMSfreeChunkMemoryNull_call()

void BMSfreeChunkMemoryNull_call ( BMS_CHKMEM chkmem,
void **  ptr,
size_t  size,
const char *  filename,
int  line 
)

frees a memory element of the given chunk block if pointer is not NULL and sets pointer to NULL

Parameters
chkmemchunk block
ptrpointer to pointer to memory element to free
sizesize of memory element to allocate (only needed for sanity check)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1587 of file memory.c.

References checkChkmem, debugMessage, and freeChkmemElement().

◆ BMSgarbagecollectChunkMemory_call()

void BMSgarbagecollectChunkMemory_call ( BMS_CHKMEM chkmem)

calls garbage collection of chunk block and frees chunks without allocated memory elements

Parameters
chkmemchunk block

Definition at line 1611 of file memory.c.

References debugMessage, and garbagecollectChkmem().

◆ BMSgetChunkMemoryUsed_call()

long long BMSgetChunkMemoryUsed_call ( const BMS_CHKMEM chkmem)

returns the number of allocated bytes in the chunk block

Parameters
chkmemchunk block

Definition at line 1621 of file memory.c.

References checkBlkmem, checkChkmem, and CHKHASH_SIZE.

◆ findChkmem()

static BMS_CHKMEM* findChkmem ( const BMS_BLKMEM blkmem,
const void *  ptr 
)
static

finds the chunk block, to whick the given pointer belongs to

This could be done by selecting the chunk block of the corresponding element size, but in a case of an error (free gives an incorrect element size), we want to identify and output the correct element size.

Parameters
blkmemblock memory
ptrmemory element to search

Definition at line 1685 of file memory.c.

References CHKHASH_SIZE, and isPtrInChkmem().

Referenced by BMSgetBlockPointerSize_call().

◆ getHashNumber()

static int getHashNumber ( int  size)
static

calculates hash number of memory size

Parameters
sizeelement size

Definition at line 1708 of file memory.c.

References BMSisAligned(), and CHKHASH_POWER.

Referenced by BMSallocBlockMemory_work(), and BMSfreeBlockMemory_work().

◆ BMScreateBlockMemory_call()

BMS_BLKMEM* BMScreateBlockMemory_call ( int  initchunksize,
int  garbagefactor,
const char *  filename,
int  line 
)

creates a block memory allocation data structure

Parameters
initchunksizenumber of elements in the first chunk of each chunk block
garbagefactorgarbage collector is called, if at least garbagefactor * avg. chunksize elements are free (-1: disable garbage collection)
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1719 of file memory.c.

References BMSallocMemory, CHKHASH_SIZE, printError, and printErrorHeader.

◆ BMSclearBlockMemory_call()

void BMSclearBlockMemory_call ( BMS_BLKMEM blkmem,
const char *  filename,
int  line 
)

frees all chunk blocks in the block memory

Parameters
blkmemblock memory
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1753 of file memory.c.

References CHKHASH_SIZE, destroyChkmem(), printError, and printErrorHeader.

Referenced by BMSdestroyBlockMemory_call().

◆ BMSdestroyBlockMemory_call()

void BMSdestroyBlockMemory_call ( BMS_BLKMEM **  blkmem,
const char *  filename,
int  line 
)

clears and deletes block memory

Parameters
blkmempointer to block memory
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1787 of file memory.c.

References BMSclearBlockMemory_call(), BMSfreeMemory, INLINE, printError, and printErrorHeader.

◆ BMSallocBlockMemory_work()

static INLINE void* BMSallocBlockMemory_work ( BMS_BLKMEM blkmem,
size_t  size,
const char *  filename,
int  line 
)
static

work for allocating memory in the block memory pool

Parameters
blkmemblock memory
sizesize of memory element to allocate
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1810 of file memory.c.

References allocChkmemElement(), BMSduplicateMemoryArray, checkBlkmem, createChkmem(), debugMessage, getHashNumber(), MAX, printError, and printErrorHeader.

Referenced by BMSallocBlockMemory_call(), and BMSallocBlockMemoryArray_call().

◆ BMSallocBlockMemory_call()

void* BMSallocBlockMemory_call ( BMS_BLKMEM blkmem,
size_t  size,
const char *  filename,
int  line 
)

allocates memory in the block memory pool

Parameters
blkmemblock memory
sizesize of memory element to allocate
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1873 of file memory.c.

References BMSallocBlockMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSduplicateBlockMemory_call(), and BMSreallocBlockMemory_call().

◆ BMSallocBlockMemoryArray_call()

void* BMSallocBlockMemoryArray_call ( BMS_BLKMEM blkmem,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates array in the block memory pool

Parameters
blkmemblock memory
numsize of array to be allocated
typesizesize of each component
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1893 of file memory.c.

References BMSallocBlockMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSallocClearBlockMemoryArray_call(), BMSduplicateBlockMemoryArray_call(), and BMSreallocBlockMemoryArray_call().

◆ BMSallocClearBlockMemoryArray_call()

void* BMSallocClearBlockMemoryArray_call ( BMS_BLKMEM blkmem,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates array in the block memory pool and clears it

Parameters
blkmemblock memory
numsize of array to be allocated
typesizesize of each component
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1914 of file memory.c.

References BMSallocBlockMemoryArray_call(), and BMSclearMemorySize.

◆ BMSreallocBlockMemory_call()

void* BMSreallocBlockMemory_call ( BMS_BLKMEM blkmem,
void *  ptr,
size_t  oldsize,
size_t  newsize,
const char *  filename,
int  line 
)

resizes memory element in the block memory pool and copies the data

Parameters
blkmemblock memory
ptrmemory element to reallocated
oldsizeold size of memory element
newsizenew size of memory element
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1932 of file memory.c.

References BMSallocBlockMemory_call(), BMScopyMemorySize, BMSfreeBlockMemory_call(), MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSreallocBlockMemoryArray_call()

void* BMSreallocBlockMemoryArray_call ( BMS_BLKMEM blkmem,
void *  ptr,
size_t  oldnum,
size_t  newnum,
size_t  typesize,
const char *  filename,
int  line 
)

resizes array in the block memory pool and copies the data

Parameters
blkmemblock memory
ptrmemory element to reallocated
oldnumold size of array
newnumnew size of array
typesizesize of each component
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 1972 of file memory.c.

References BMSallocBlockMemoryArray_call(), BMScopyMemorySize, BMSfreeBlockMemory_call(), MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSduplicateBlockMemory_call()

void* BMSduplicateBlockMemory_call ( BMS_BLKMEM blkmem,
const void *  source,
size_t  size,
const char *  filename,
int  line 
)

duplicates memory element in the block memory pool and copies the data

Parameters
blkmemblock memory
sourcememory element to duplicate
sizesize of memory elements
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2011 of file memory.c.

References BMSallocBlockMemory_call(), and BMScopyMemorySize.

◆ BMSduplicateBlockMemoryArray_call()

void* BMSduplicateBlockMemoryArray_call ( BMS_BLKMEM blkmem,
const void *  source,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

duplicates array in the block memory pool and copies the data

Parameters
blkmemblock memory
sourcememory element to duplicate
numsize of array to be duplicated
typesizesize of each component
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2031 of file memory.c.

References BMSallocBlockMemoryArray_call(), BMScopyMemorySize, and INLINE.

◆ BMSfreeBlockMemory_work()

static INLINE void BMSfreeBlockMemory_work ( BMS_BLKMEM blkmem,
void **  ptr,
size_t  size,
const char *  filename,
int  line 
)
static

common work for freeing block memory

Parameters
blkmemblock memory
ptrpointer to pointer to memory element to free
sizesize of memory element
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2053 of file memory.c.

References checkBlkmem, debugMessage, freeChkmemElement(), getHashNumber(), MAX, printError, and printErrorHeader.

Referenced by BMSfreeBlockMemory_call(), and BMSfreeBlockMemoryNull_call().

◆ BMSfreeBlockMemory_call()

void BMSfreeBlockMemory_call ( BMS_BLKMEM blkmem,
void **  ptr,
size_t  size,
const char *  filename,
int  line 
)

frees memory element in the block memory pool and sets pointer to NULL

Parameters
blkmemblock memory
ptrpointer to pointer to memory element to free
sizesize of memory element
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2101 of file memory.c.

References BMSfreeBlockMemory_work(), checkBlkmem, printError, and printErrorHeader.

Referenced by BMSreallocBlockMemory_call(), and BMSreallocBlockMemoryArray_call().

◆ BMSfreeBlockMemoryNull_call()

void BMSfreeBlockMemoryNull_call ( BMS_BLKMEM blkmem,
void **  ptr,
size_t  size,
const char *  filename,
int  line 
)

frees memory element in the block memory pool if pointer is not NULL and sets pointer to NULL

Parameters
blkmemblock memory
ptrpointer to pointer to memory element to free
sizesize of memory element
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2123 of file memory.c.

References BMSfreeBlockMemory_work(), and checkBlkmem.

◆ BMSgarbagecollectBlockMemory_call()

void BMSgarbagecollectBlockMemory_call ( BMS_BLKMEM blkmem)

calls garbage collection of block memory, frees chunks without allocated memory elements, and frees chunk blocks without any chunks

Parameters
blkmemblock memory

Definition at line 2144 of file memory.c.

References checkBlkmem, CHKHASH_SIZE, destroyChkmem(), and garbagecollectChkmem().

◆ BMSgetBlockMemoryAllocated_call()

long long BMSgetBlockMemoryAllocated_call ( const BMS_BLKMEM blkmem)

returns the number of allocated bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2178 of file memory.c.

◆ BMSgetBlockMemoryUsed_call()

long long BMSgetBlockMemoryUsed_call ( const BMS_BLKMEM blkmem)

returns the number of used bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2188 of file memory.c.

◆ BMSgetBlockMemoryUnused_call()

long long BMSgetBlockMemoryUnused_call ( const BMS_BLKMEM blkmem)

returns the number of allocated but not used bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2198 of file memory.c.

◆ BMSgetBlockMemoryUsedMax_call()

long long BMSgetBlockMemoryUsedMax_call ( const BMS_BLKMEM blkmem)

returns the maximal number of used bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2208 of file memory.c.

◆ BMSgetBlockMemoryUnusedMax_call()

long long BMSgetBlockMemoryUnusedMax_call ( const BMS_BLKMEM blkmem)

returns the maximal number of allocated but not used bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2218 of file memory.c.

◆ BMSgetBlockMemoryAllocatedMax_call()

long long BMSgetBlockMemoryAllocatedMax_call ( const BMS_BLKMEM blkmem)

returns the maximal number of allocated bytes in the block memory

Parameters
blkmemblock memory

Definition at line 2228 of file memory.c.

◆ BMSgetBlockPointerSize_call()

size_t BMSgetBlockPointerSize_call ( const BMS_BLKMEM blkmem,
const void *  ptr 
)

returns the size of the given memory element; returns 0, if the element is not member of the block memory

Parameters
blkmemblock memory
ptrmemory element

Definition at line 2238 of file memory.c.

References findChkmem().

◆ BMSdisplayBlockMemory_call()

void BMSdisplayBlockMemory_call ( const BMS_BLKMEM blkmem)

outputs allocation diagnostics of block memory

Parameters
blkmemblock memory

Definition at line 2258 of file memory.c.

References CHKHASH_SIZE, FOR_EACH_NODE, LONGINT_FORMAT, and printInfo.

◆ BMScheckEmptyBlockMemory_call()

long long BMScheckEmptyBlockMemory_call ( const BMS_BLKMEM blkmem)

outputs error messages, if there are allocated elements in the block memory and returns number of unfreed bytes

Parameters
blkmemblock memory

Definition at line 2382 of file memory.c.

References CHKHASH_SIZE, errorMessage, FOR_EACH_NODE, and LONGINT_FORMAT.

◆ BMScreateBufferMemory_call()

BMS_BUFMEM* BMScreateBufferMemory_call ( double  arraygrowfac,
int  arraygrowinit,
unsigned int  clean,
const char *  filename,
int  line 
)

creates memory buffer storage

Parameters
arraygrowfacmemory growing factor for dynamically allocated arrays
arraygrowinitinitial size of dynamically allocated arrays
cleanshould the memory blocks in the buffer be initialized to zero?
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2476 of file memory.c.

References BMS_BufMem::arraygrowfac, BMS_BufMem::arraygrowinit, BMSallocMemory, BMS_BufMem::clean, BMS_BufMem::data, BMS_BufMem::firstfree, BMS_BufMem::ndata, printError, printErrorHeader, BMS_BufMem::size, BMS_BufMem::totalmem, and BMS_BufMem::used.

◆ BMSdestroyBufferMemory_call()

void BMSdestroyBufferMemory_call ( BMS_BUFMEM **  buffer,
const char *  filename,
int  line 
)

destroys buffer memory

Parameters
bufferpointer to memory buffer storage
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2512 of file memory.c.

References BMSfreeMemory, BMSfreeMemoryArrayNull, printError, and printErrorHeader.

◆ BMSsetBufferMemoryArraygrowfac()

void BMSsetBufferMemoryArraygrowfac ( BMS_BUFMEM buffer,
double  arraygrowfac 
)

set arraygrowfac

Parameters
bufferpointer to memory buffer storage
arraygrowfacmemory growing factor for dynamically allocated arrays

Definition at line 2545 of file memory.c.

References BMS_BufMem::arraygrowfac.

◆ BMSsetBufferMemoryArraygrowinit()

void BMSsetBufferMemoryArraygrowinit ( BMS_BUFMEM buffer,
int  arraygrowinit 
)

set arraygrowinit

Parameters
bufferpointer to memory buffer storage
arraygrowinitinitial size of dynamically allocated arrays

Definition at line 2557 of file memory.c.

References BMS_BufMem::arraygrowinit.

Referenced by SCIP_DECL_PARAMCHGD().

◆ calcMemoryGrowSize()

static size_t calcMemoryGrowSize ( size_t  initsize,
SCIP_Real  growfac,
size_t  num 
)
static

calculate memory size for dynamically allocated arrays

This function is a copy of the function in set.c in order to be able to use memory.? separately.

Parameters
initsizeinitial size of array
growfacgrowing factor of array
numminimum number of entries to store

Definition at line 2574 of file memory.c.

References INLINE, and MAX.

Referenced by BMSallocBufferMemory_work(), and BMSreallocBufferMemory_work().

◆ BMSallocBufferMemory_work()

static INLINE void* BMSallocBufferMemory_work ( BMS_BUFMEM buffer,
size_t  size,
const char *  filename,
int  line 
)
static

work for allocating the next unused buffer

Parameters
buffermemory buffer storage
sizeminimal required size of the buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2616 of file memory.c.

References BMS_BufMem::arraygrowfac, BMS_BufMem::arraygrowinit, BMSallocClearMemorySize, BMSallocMemorySize, BMSclearMemorySize, BMSreallocMemoryArray, BMSreallocMemorySize, calcMemoryGrowSize(), BMS_BufMem::clean, BMS_BufMem::data, debugMessage, FALSE, BMS_BufMem::firstfree, MAX, BMS_BufMem::ndata, printError, printErrorHeader, BMS_BufMem::size, BMS_BufMem::totalmem, TRUE, and BMS_BufMem::used.

Referenced by BMSallocBufferMemory_call(), and BMSallocBufferMemoryArray_call().

◆ BMSallocBufferMemory_call()

void* BMSallocBufferMemory_call ( BMS_BUFMEM buffer,
size_t  size,
const char *  filename,
int  line 
)

allocates the next unused buffer

Parameters
buffermemory buffer storage
sizeminimal required size of the buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2750 of file memory.c.

References BMSallocBufferMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSduplicateBufferMemory_call(), and BMSreallocBufferMemory_work().

◆ BMSallocBufferMemoryArray_call()

void* BMSallocBufferMemoryArray_call ( BMS_BUFMEM buffer,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates the next unused buffer array

Parameters
buffermemory buffer storage
numsize of array to be allocated
typesizesize of components
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2770 of file memory.c.

References BMSallocBufferMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

Referenced by BMSallocClearBufferMemoryArray_call(), and BMSduplicateBufferMemoryArray_call().

◆ BMSallocClearBufferMemoryArray_call()

void* BMSallocClearBufferMemoryArray_call ( BMS_BUFMEM buffer,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates the next unused buffer and clears it

Parameters
buffermemory buffer storage
numsize of array to be allocated
typesizesize of components
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2791 of file memory.c.

References BMSallocBufferMemoryArray_call(), BMSclearMemorySize, and INLINE.

◆ BMSreallocBufferMemory_work()

static INLINE void* BMSreallocBufferMemory_work ( BMS_BUFMEM buffer,
void *  ptr,
size_t  size,
const char *  filename,
int  line 
)
static

work for reallocating the buffer to at least the given size

Parameters
buffermemory buffer storage
ptrpointer to the allocated memory buffer
sizeminimal required size of the buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2810 of file memory.c.

References BMS_BufMem::arraygrowfac, BMS_BufMem::arraygrowinit, BMSallocBufferMemory_call(), BMSreallocMemorySize, calcMemoryGrowSize(), BMS_BufMem::clean, BMS_BufMem::data, debugMessage, BMS_BufMem::firstfree, BMS_BufMem::ndata, printError, printErrorHeader, BMS_BufMem::size, BMS_BufMem::totalmem, and BMS_BufMem::used.

Referenced by BMSreallocBufferMemory_call(), and BMSreallocBufferMemoryArray_call().

◆ BMSreallocBufferMemory_call()

void* BMSreallocBufferMemory_call ( BMS_BUFMEM buffer,
void *  ptr,
size_t  size,
const char *  filename,
int  line 
)

reallocates the buffer to at least the given size

Parameters
buffermemory buffer storage
ptrpointer to the allocated memory buffer
sizeminimal required size of the buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2882 of file memory.c.

References BMSreallocBufferMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSreallocBufferMemoryArray_call()

void* BMSreallocBufferMemoryArray_call ( BMS_BUFMEM buffer,
void *  ptr,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

reallocates an array in the buffer to at least the given size

Parameters
buffermemory buffer storage
ptrpointer to the allocated memory buffer
numsize of array to be allocated
typesizesize of components
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2903 of file memory.c.

References BMSreallocBufferMemory_work(), MAXMEMSIZE, printError, and printErrorHeader.

◆ BMSduplicateBufferMemory_call()

void* BMSduplicateBufferMemory_call ( BMS_BUFMEM buffer,
const void *  source,
size_t  size,
const char *  filename,
int  line 
)

allocates the next unused buffer and copies the given memory into the buffer

Parameters
buffermemory buffer storage
sourcememory block to copy into the buffer
sizeminimal required size of the buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2925 of file memory.c.

References BMSallocBufferMemory_call(), and BMScopyMemorySize.

◆ BMSduplicateBufferMemoryArray_call()

void* BMSduplicateBufferMemoryArray_call ( BMS_BUFMEM buffer,
const void *  source,
size_t  num,
size_t  typesize,
const char *  filename,
int  line 
)

allocates an array in the next unused buffer and copies the given memory into the buffer

Parameters
buffermemory buffer storage
sourcememory block to copy into the buffer
numsize of array to be allocated
typesizesize of components
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2948 of file memory.c.

References BMSallocBufferMemoryArray_call(), BMScopyMemorySize, and INLINE.

◆ BMSfreeBufferMemory_work()

static INLINE void BMSfreeBufferMemory_work ( BMS_BUFMEM buffer,
void **  ptr,
const char *  filename,
int  line 
)
static

work for freeing a buffer

Parameters
buffermemory buffer storage
ptrpointer to pointer to the allocated memory buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 2973 of file memory.c.

References BMS_BufMem::clean, BMS_BufMem::data, debugMessage, FALSE, BMS_BufMem::firstfree, BMS_BufMem::ndata, printError, printErrorHeader, BMS_BufMem::size, BMS_BufMem::used, and warningMessage.

Referenced by BMSfreeBufferMemory_call(), and BMSfreeBufferMemoryNull_call().

◆ BMSfreeBufferMemory_call()

void BMSfreeBufferMemory_call ( BMS_BUFMEM buffer,
void **  ptr,
const char *  filename,
int  line 
)

frees a buffer and sets pointer to NULL

Parameters
buffermemory buffer storage
ptrpointer to pointer to the allocated memory buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 3044 of file memory.c.

References BMSfreeBufferMemory_work(), BMSfreeMemory, printError, and printErrorHeader.

◆ BMSfreeBufferMemoryNull_call()

void BMSfreeBufferMemoryNull_call ( BMS_BUFMEM buffer,
void **  ptr,
const char *  filename,
int  line 
)

frees a buffer if pointer is not NULL and sets pointer to NULL

Parameters
buffermemory buffer storage
ptrpointer to pointer to the allocated memory buffer
filenamesource file of the function call
lineline number in source file of the function call

Definition at line 3067 of file memory.c.

References BMSfreeBufferMemory_work(), and BMSfreeMemory.

◆ BMSgetNUsedBufferMemory()

size_t BMSgetNUsedBufferMemory ( BMS_BUFMEM buffer)

gets number of used buffers

Parameters
buffermemory buffer storage

Definition at line 3087 of file memory.c.

References BMS_BufMem::firstfree.

Referenced by exitPresolve(), initPresolve(), presolve(), presolveRound(), priceAndCutLoop(), propagationRound(), propAndSolve(), SCIPprimalHeuristics(), SCIPsolveCIP(), separationRoundLP(), and solveNode().

◆ BMSgetBufferMemoryUsed()

long long BMSgetBufferMemoryUsed ( const BMS_BUFMEM buffer)

returns the number of allocated bytes in the buffer memory

Parameters
bufferbuffer memory

Definition at line 3097 of file memory.c.

References BMS_BufMem::ndata, BMS_BufMem::size, and BMS_BufMem::totalmem.

Referenced by SCIPmemGetTotal(), and SCIPmemGetUsed().

◆ BMSprintBufferMemory()

void BMSprintBufferMemory ( BMS_BUFMEM buffer)

outputs statistics about currently allocated buffers to the screen

Parameters
buffermemory buffer storage

Definition at line 3115 of file memory.c.

References BMS_BufMem::data, BMS_BufMem::ndata, BMS_BufMem::size, and BMS_BufMem::used.

Referenced by SCIPprintMemoryDiagnostic().