Функция 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.