madvise()函数不起作用

时间:2012-02-02 09:53:34

标签: memory memory-management

我正在尝试 madvise ()将已分配的内存标记为可合并,以便可以合并具有相同页面的两个应用程序。

使用 madvise ()函数时,会显示“无效参数”。

#include<stdio.h>
#include<sys/mman.h>
#include<stdlib.h>
#include<errno.h>
#define ADDR 0xf900f000
int main()
{
        int *var1=NULL,*var2=NULL;
        size_t size=0;

        size = 1000*sizeof(int);

        var1 = (int*)malloc(size);
        var2 = (int *)malloc(size);


        int i=0;

        for(i=0;i<999;i++)
        {
                var1[i] = 1;
        }

        for(i=0;i<999;i++)
        {
                var2[i] = 1;
        }

        i = -1;

        while(i<0)
        {
                i = madvise((void *)var1, size, MADV_MERGEABLE);        //to declare mergeable

                printf("%d %p\n", i, var1);       //to print the output value
                err(1,NULL);            //to print the generated error

                i = madvise((void *)var2, size, MADV_MERGEABLE);       //to declare mergeable
                printf("%d\n", i);
        }

        return 0;
}

错误:

a.out: Invalid argument

请帮帮我。

谢谢。

1 个答案:

答案 0 :(得分:1)

您只能整合整个页面。您无法合并任意数据块。