mmap()を使用してmalloc()から割り当てられた配列またはメモリのメモリマップを検索しようとしていますが、無効な引数が表示されています。mmap()の配列またはmallocedメモリ
#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
私を助けてください。
ありがとうございます。
実際には、madivse()のマッピングをさらに使い、メモリをマージ可能としてマークします。 madvise()を使用してmallocedメモリをマージ可能としてマークする手助けができれば。 私を助けてください。 – pratick
'madvise'のマニュアルページを読んでください。 「KSMはプライベートな匿名ページのみをマージします(「mmap(2)」を参照)。あなたは 'malloc'からあなたのメモリブロックを手に入れました。私的な匿名のページではありません。これは、 'madvise(MADV_MERGEABLE)'の使用要件に適合しません。物語の終わり。 – Celada