数组或mallocated内存的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(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()管理映射内存。

最新更新