我正试图使用mmap()查找数组的内存映射或从malloc()分配的一些内存,但它显示的参数无效。
#include<stdio.h>
#include<sys/mman.h>
#include<stdlib.h>
int main()
{
int *var1=NULL;
size_t size=0;
size = 1000*sizeof(int);
var1 = (int*)malloc(size);
int i=0;
for(i=0;i<999;i++)
{
var1[i] = 1;
}
printf("%pn",var1);
void *addr=NULL;
addr = mmap((void *)var1, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0); //to create memory map of var1
err(1,NULL); //to print error
return 0;
}
错误:
a.out: Invalid argument
请帮帮我。
提前谢谢。
近似原因:mmap
失败,因为您要求它创建新的内存映射,您要求将映射放置在特定地址(var1
的地址),该地址已被占用(malloc
从中获得内存的堆),并且您告诉操作系统,如果var1
不是合适的地址(MAP_FIXED
),则不允许选择备用地址。
分析:你想在这里做什么?"查找数组的内存映射"是什么意思?您想让您的整数数组位于堆内存(由malloc()
返回)还是mmap()
创建的匿名内存映射中?顺便说一句,除非您fork()
(创建一个子进程),否则功能上几乎没有什么区别:两者都是进程专用的内存区域。但它们不是一回事,不能用mmap()
操作堆,也不能用malloc()
管理映射内存。