我正在尝试使用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("%p\n",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
请帮帮我。
提前谢谢。
答案 0 :(得分:2)
近似原因:mmap
失败,因为您要求它创建新的内存映射,您要求将映射放置在特定地址(var1
地址),该地址已被占用(由malloc
获取其内存的堆),并告诉操作系统,如果var1
不合适,则不允许选择备用地址地址(MAP_FIXED
)。
分析:你想在这做什么? “找到数组的内存映射”是什么意思?是否要将堆积内存中的整数数组(由malloc()
返回)或由mmap()
创建的匿名内存映射?顺便说一句,除非你fork()
(创建一个子进程),否则几乎没有功能差异:两者都是你的进程专用的内存区域。但它们不是同一个东西,您无法使用mmap()
操纵堆,也无法使用malloc()
管理映射内存。