如何获取mmap分配的字节数?

时间:2014-12-02 21:29:34

标签: c

我正在使用mmap构建malloc的自定义实现。

如果用户想要分配500字节的内存,我会调用mmap(0, 500, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)mmap返回指向大小为4096的块的指针(如果这是页面大小)。

在我的链表中,我希望将一个块设置为标记为已采用的500个字节,将一个块设置为4096-500 = 3596个字节,标记为空闲。然而,目前尚不清楚,mmap确实分配了多少内存。我怎样才能获得这些信息?

1 个答案:

答案 0 :(得分:0)

mmap()的原型是:

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);`

从技术上讲,只保证会分配length个字节。但是,在实践中,它会分配整个页面(即PAGE_SIZE的倍数),但不保证您可以使用length以外的任何内容。确实按照手册页:

  

offset必须是sysconf(_SC_PAGE_SIZE)返回的页面大小的倍数。

请注意,lengthPAGE_SIZE的倍数没有任何限制,但您也可以将length四舍五入为PAGE_SIZE的倍数(因为&#39} ;无论如何都要分配什么),在这种情况下,分配的内存量正好是length。如果您不这样做,它将分配包含length个字节的最小整页数。