Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C/Posix Questions

Tags:

c

posix

jamvm

I have been working for two weeks on JamVM, a small but powerful Java Virtual Machine.

Now I am trying to figure how the memory is implemented and I am stuck on two C stupid problems:

char *mem = (char*)mmap(0, args->max_heap, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON, -1, 0);

--> The -1 parameter stands for a file descriptor, what does that mean? (I have aleady read the mmap man, but haven't found it, maybe I misunderstood...).

heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1&)~(OBJECT_GRAIN-1)) HEADER_SIZE;

--> What is 1& ? I don't find it in the C specification...

Thanks,

Yann

like image 417
scoobyclown Avatar asked Jul 19 '26 02:07

scoobyclown


1 Answers

In answer to your first question. From the man page.

fd should be a valid file descriptor, unless MAP_ANONYMOUS is set. If MAP_ANONYMOUS is set, then fd is ignored on Linux. However, some implementations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is specified, and portable applications should ensure this.

So it's -1 because MAP_ANONYMOUS is being used.

like image 190
Jeff Foster Avatar answered Jul 21 '26 20:07

Jeff Foster



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!