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.
Un système et une méthode pour l'attribution de mémoire d'un tas comportant des blocs de mémoire d'une taille fixe uniforme. Chaque bloc de mémoire a un peu de statut. Une clef de statut binaire stocke une valeur booléenne indiquant la mémoire libre. Le tas est balayé dans l'ordre jusqu'à ce qu'un ordre d'une quantité demandée de blocs contigus libres de mémoire soit trouvé ou NUL est retourné. Chaque bloc libre balayé de mémoire est un-libre marqué en assignant son statut mordu au négatif logique de la clef de statut binaire. Si l'extrémité du tas est atteinte avant qu'un ordre de quantité suffisante soit trouvé, tous les blocs accessibles sont marqués en tant que librement. La clef de statut binaire est renversée tels que tous les blocs de mémoire qui ont été marqués librement sont maintenant un-libres, et vice versa. N'importe quel bloc de mémoire dont la structure correspondante est devenue unreferenced est repris pour le futur usage. Le balayage continue alors du commencement du tas. Dans une autre incorporation, une attribution de mémoire pour une structure de données divisée d'un tas des blocs à taille fixe de mémoire peut être employée. La quantité de blocs de mémoire exigés pour stocker une structure de données est déterminée. La quantité exigée des blocs de mémoire, qui peuvent être noncontiguous, est assignée du tas. Les blocs assignés de mémoire sont liés dans une liste tels que les composants de la structure de données sont divisés dans l'ordre approprié à travers la quantité assignée de blocs de mémoire.