我相信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),或者是否有一些简单和快速的类似方法?
提前告诉所有人: - )