我已经在JamVM上工作了两个星期,这是一个小但功能强大的Java虚拟机。
现在我正在试图弄清楚内存是如何实现的,我被两个愚蠢的C语言问题所困扰:
char *mem = (char*)mmap(0, args->max_heap, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON, -1, 0);
-->参数-1代表文件描述符,这是什么意思?(我已经读过mmap man了,但还没找到,可能是我误解了……)
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1&)~(OBJECT_GRAIN-1)) HEADER_SIZE;
-->什么是1&?我在C规范中找不到它...
谢谢,
扬恩
发布于 2011-06-17 21:32:40
回答你的第一个问题。来自man page的。
除非设置了MAP_ANONYMOUS,否则
fd应该是有效的文件描述符。如果设置了MAP_ANONYMOUS,那么在Linux上会忽略fd。但是,如果指定了MAP_ANONYMOUS (或MAP_ANON),则某些实现要求fd为-1,可移植应用程序应确保这一点。
所以它是-1,因为正在使用MAP_ANONYMOUS。
https://stackoverflow.com/questions/6386406
复制相似问题