A system and method for memory allocation from a heap comprising memory
blocks of a uniform fixed size. Each memory block has a status bit. A
binary status key stores a Boolean value indicating free memory. The heap
is scanned in order until a sequence of a requested quantity of free
contiguous memory blocks is found or NULL is returned. Each scanned free
memory block is marked un-free by assigning its status bit to the logical
negative of the binary status key. If the end of the heap is reached
before a sequence of sufficient quantity is found, all reachable blocks
are marked as free. The binary status key is flipped such that all memory
blocks which were marked free are now un-free, and vice versa. Any memory
block whose corresponding structure has become unreferenced is reclaimed
for future use. The scan then continues from the beginning of the heap. In
another embodiment, a memory allocation for a partitioned data structure
from a heap of fixed-size memory blocks may be used. The quantity of
memory blocks required to store a data structure is determined. The
required quantity of the memory blocks, which may be noncontiguous, is
allocated from the heap. The allocated memory blocks are linked in a list
such that the components of the data structure are partitioned in the
proper order across the allocated quantity of memory blocks.
Um sistema e um método para o alocamento de memória de um heap que compreende blocos da memória de um tamanho fixo uniforme. Cada bloco da memória tem um bocado do status. Uma chave de status binária armazena um valor booleano que indica a memória livre. O heap está feito a varredura em ordem até que uma seqüência de uma quantidade pedida de blocos contíguos livres da memória esteja encontrada ou NULO estiver retornado. Cada bloco livre feito a varredura da memória é un-livre marcado atribuindo seu status mordido ao negativo lógico da chave de status binária. Se a extremidade do heap for alcançada antes que uma seqüência da quantidade suficiente esteja encontrada, todos os blocos reachable estão marcados como livre. A chave de status binária é lançada tais que todos os blocos da memória que foram marcados livre são agora un-livres, e versa vice. Todo o bloco da memória cuja a estrutura correspondente se tornar unreferenced é recuperado para o uso futuro. A varredura continua então do começo do heap. Em uma outra incorporação, um alocamento de memória para uma estrutura de dados dividida de um heap de blocos fixed-size da memória pode ser usado. A quantidade dos blocos da memória requeridos para armazenar uma estrutura de dados é determinada. A quantidade requerida dos blocos da memória, que podem ser noncontiguous, é alocada do heap. Os blocos alocados da memória são ligados em uma lista tais que os componentes da estrutura de dados estão divididos na ordem apropriada através da quantidade alocada de blocos da memória.