map()或malloced内存的map()

时间:2012-02-02 16:09:14

标签: 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(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

请帮帮我。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

近似原因mmap失败,因为您要求它创建新的内存映射,您要求将映射放置在特定地址(var1地址),该地址已被占用(由malloc获取其内存的堆),并告诉操作系统,如果var1不合适,则不允许选择备用地址地址(MAP_FIXED)。

分析:你想在这做什么? “找到数组的内存映射”是什么意思?是否要将堆积内存中的整数数组(由malloc()返回)或由mmap()创建的匿名内存映射?顺便说一句,除非你fork()(创建一个子进程),否则几乎没有功能差异:两者都是你的进程专用的内存区域。但它们不是同一个东西,您无法使用mmap()操纵堆,也无法使用malloc()管理映射内存。