Lines Matching defs:heap_node

68 // On both 64 and 32 bit targets heap_node should have the following properties
71 struct heap_node {
73 heap_size len; // size in units of "sizeof(heap_node)"
83 static_assert(alignof(FallbackMaxAlignType) % sizeof(heap_node) == 0,
84 "The required alignment must be evenly divisible by the sizeof(heap_node)");
86 // The number of heap_node's that can fit in a chunk of memory with the size
88 const size_t NodesPerAlignment = alignof(FallbackMaxAlignType) / sizeof(heap_node);
90 static const heap_node* list_end =
91 (heap_node*)(&heap[HEAP_SIZE]); // one past the end of the heap
92 static heap_node* freelist = NULL;
94 heap_node* node_from_offset(const heap_offset offset) {
95 return (heap_node*)(heap + (offset * sizeof(heap_node)));
98 heap_offset offset_from_node(const heap_node* ptr) {
101 sizeof(heap_node));
105 // used to represent a heap_node. 'A' must be aligned so that
106 // '(A + sizeof(heap_node)) % RequiredAlignment == 0'. On 64 bit systems this
108 heap_node* getFirstAlignedNodeInHeap() {
109 heap_node* node = (heap_node*)heap;
110 const size_t alignNBytesAfterBoundary = RequiredAlignment - sizeof(heap_node);
113 size_t NElemOffset = requiredOffset / sizeof(heap_node);
125 return (len + sizeof(heap_node) - 1) / sizeof(heap_node) + 1;
133 heap_node *p, *prev;
149 // to split 'p' and create a properly aligned heap_node from the tail
158 // chunk is larger and we can create a properly aligned heap_node
161 heap_node* q;
188 heap_node* after(struct heap_node* p) { return p + p->len; }
191 struct heap_node* cp = ((struct heap_node*)ptr) - 1; // retrieve the chunk
192 struct heap_node *p, *prev;
212 p->len + cp->len); // make the free heap_node larger
214 } else if (after(cp) == p) { // there's a free heap_node right after
237 struct heap_node *p, *prev;