问题描述
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int* ptr = (int *) mmap(0x4096,sizeof(int)*1024,1100,MAP_PRIVATE,0);
fprintf(stdout,"%p\n",ptr);
if (ptr == MAP_FAILED)
{
fprintf(stderr,"Could not mmap\n");
return 1;
}
return 0;
}
我的代码无法打印,我无法弄清楚我在做什么错。我的内存页面大小为4096字节,因此我的地址输入也与页面大小对齐。我想做的是在我指定的地址上使用mmap为1024个整数分配一个内存空间。
解决方法
正如一些人在评论中指出的那样,我应该使用MAP_ANONYMOUS,并且没有正确指定内存位置。使用以下参数有效,
mmap((void*) 0x0804a000,sizeof(int)*1024,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,0);