Memory 数组或malloced内存的mmap()
我试图使用mmap()查找数组的内存映射或从malloc()分配的一些内存,但它显示的参数无效Memory 数组或malloced内存的mmap(),memory,memory-management,mmap,Memory,Memory Management,Mmap,我试图使用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(si
#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;
}
请帮帮我
提前感谢。近因:
mmap
失败,因为您要求它创建一个新的内存映射,您要求将映射放置在一个特定的地址(var1
的地址),该地址已经被占用(由malloc
获取内存的堆占用),您告诉操作系统,如果var1
不是合适的地址(MAP\u FIXED
),则不允许选择备用地址
分析:你想在这里做什么?“查找数组的内存映射”是什么意思?您希望整数数组位于堆内存中(由
malloc()
返回)还是位于由mmap()
创建的匿名内存映射中?顺便说一句,除非您fork()
(创建子进程),否则功能上没有什么区别:它们都是进程专用的内存区域。但是它们不是一回事,你不能用mmap()
操作堆,也不能用malloc()
管理映射内存,实际上我想进一步使用madivse()中的映射将内存标记为可合并的。因此,如果您能帮助我使用madvise()将一些malloced内存标记为可合并。请帮助我。阅读madvise
手册页。它说“KSM只合并私人匿名页面(参见mmap(2)
)”。您从malloc
获得了内存块。它不是私人匿名页面。它不符合使用madvise(MADV\u mergable)
的要求。故事结束了。
a.out: Invalid argument