在我使用mprotect()保护内存区域后,第一次调用malloc()时出现了分段错误。这是一个代码sniplet,做内存分配的保护:malloc导致mprotect出现分段错误
#define PAGESIZE 4096
void* paalloc(int size){ // Allocates and aligns memory
int type_size = sizeof(double);
void* p;
p = malloc(type_size*size+PAGESIZE-1);
p = (void*)(((long) p + PAGESIZE-1) & ~(PAGESIZE-1));
return p;
}
void aprotect(int size, void* array){ // Protects memory after values are set
int type_size = sizeof(double);
if (mprotect(array, type_size*size, PROT_READ)) {
perror("Couldn't mprotect");
}
}
我想用mprotect的避免任何写入我的数组(这是预先计算正弦/余弦值)。这是一个愚蠢的想法吗?
请同时添加类型cast(void *)mallac .... – Vijay 2009-11-06 12:59:56
@john:您不需要转换 – Wernsey 2009-11-06 13:03:20
没有足够的关联来编辑帖子,但是那些发现这个问题的人可能也会对这:http://stackoverflow.com/questions/1686464/alternatives-to-mprotect咖啡的关于页面对齐的答案已经死了,似乎今天是一个热门话题:) – 2009-11-06 13:32:32