匿名mmaped内存上的可扩展mremap

时间:2011-08-22 10:44:09

标签: linux memory-management linux-kernel mmap

我相信mremap会有类似realloc的行为,直到调试C中的以下几行代码之类的内容。

#define PAGESIZE 0x1000
void *p = mmap(0, PAGESIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
void *p2 = mremap(p, PAGESIZE, PAGESIZE * 2, MREMAP_MAYMOVE);
// then any future access to the 2nd page in p2 would generate a nice SIGBUS

在查看某些邮件列表中的几个旧线程后,我知道mmap最初是为“纯”文件映射而设计的,设计mremap的人似乎并不关心上述代码。

我知道共享内存对象可以做到这一点。但是shm_open / shm_unlink需要文件名,我不想在这个项目中处理字符串。而且,我不确定,共享内存对象可能会或多或少地降低我的应用程序的性能。

我只是想知道是否可以通过匿名映射内存使mremap工作正常(这里很好意味着没有扩展时的SIGBUS),或者是否有一些简单和快速的类似方法?

提前告诉所有人: - )

0 个答案:

没有答案