функция madvise () не работает - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь 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 Ответ

1 голос
/ 02 февраля 2012

Вы можете объединять только целые страницы. Вы не можете объединять произвольные фрагменты данных.

...