Memory 数组或malloced内存的mmap()

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

我试图使用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;
}
请帮帮我


提前感谢。

近因
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