【发布时间】:2009-11-06 12:54:32
【问题描述】:
我在使用 mprotect() 保护内存区域后第一次调用 malloc() 时遇到分段错误。这是一个执行内存分配保护的代码片段:
#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 来避免将任何内容写入我的数组(这是预先计算的正弦/余弦值)。这是一个愚蠢的想法吗?
【问题讨论】:
-
请同时添加类型转换 (void *)mallac....
-
@john: 你不需要演员表
-
相关性不足以让我编辑帖子,但发现此问题的人可能也对此感兴趣:stackoverflow.com/questions/1686464/alternatives-to-mprotect Caf 关于页面对齐的答案已死,似乎是今天的热门话题: )
标签: c memory-management malloc posix