【发布时间】:2011-06-17 13:25:14
【问题描述】:
我已经在 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 规范中找不到它...
谢谢,
亚恩
【问题讨论】:
-
如果这是两个独立的问题,那么您就可以给每个问题一个有用的标题。
-
-1&)~(甚至不是合法的 C(编译器应该抱怨缺少令牌),你确定它不是-1)&~(?这意味着 AND NOT,(通常用于关闭特定位) -
@Wiz:在这种情况下,OBJECT_GRAIN 可能是 2 的幂,所以如果代码是
-1)&~,那么它会将mem+HEADER_SIZE舍入到OBJECT_GRAIN的下一个倍数。跨度> -
是的,我确定,我复制了源代码!如果是错误,可能会出现 compile no 警告?
-
@scoobyclown:请接受可以解决您的问题的答案,而不是将其编辑到标题中。 Stackoverflow.com 不是论坛。