【发布时间】:2017-09-27 23:58:10
【问题描述】:
我通过malloc 和aligned_alloc 分配了一些大块内存,然后我使用mprotect 为内存内的一个页面大小的区域设置了一个围栏:
void *buf = malloc(128 * PAGE_SIZE);
int ret = mprotect(buf, PAGE_SIZE, PROT_NONE);
现在我已经完成了内存并正在调用free(buf); 来释放它,我的问题是在调用free 之前是否需要重置mprotect,如下所示:
ret = mprotect(buf, PAGE_SIZE, PROT_READ|PROT_WRITE);
free(buf);
或者我应该只做free?我读到glibc有时会重用之前分配的一些内存,所以如果这块内存区域稍后返回malloc,访问它会不会导致问题(因为它是PROT_NONE)?
【问题讨论】:
标签: c linux memory posix mprotect