Функция madvise() не работает

Я пытаюсь 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;
}
</errno.h></stdlib.h></sys></stdio.h>

Ошибка:

a.out: Invalid argument

Пожалуйста, помогите мне.

Спасибо.

1 ответ

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

licensed under cc by-sa 3.0 with attribution.