, , . ( ), . fd , , -1.
- (, ). , - :
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1)
&~(OBJECT_GRAIN-1)) - HEADER_SIZE;
OBJECT_GRAIN , . , 8, ~(OBJECT_GRAIN-1) ~7 (~00...001112, ~11...110002), , ANDed , 8 .
- ( ), , JamVM src/alloc.c, :
void initialiseAlloc(InitArgs *args) {
char *mem = (char*)mmap(0, args->max_heap, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0);
:
<< a couple of irrelevant lines >>
:
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1)&
~(OBJECT_GRAIN-1))-HEADER_SIZE;
( , - HEADER_SIZE, - , ).