malloc
とを介していくつかの大きなメモリ チャンクを割り当てaligned_alloc
、次に を使用して、メモリ内の 1 ページ サイズの領域にフェンスを設定しましたmprotect
。
void *buf = malloc(128 * PAGE_SIZE);
int ret = mprotect(buf, PAGE_SIZE, PROT_NONE);
今、私はメモリを使い果たしfree(buf);
、それを解放するために呼び出しています.私の質問は、次のように、mprotect
呼び出す前にリセットする必要がありますか?free
ret = mprotect(buf, PAGE_SIZE, PROT_READ|PROT_WRITE);
free(buf);
それとも私はやるべきfree
ですか?glibc は以前に割り当てられたメモリの一部を再利用することがあると読んだので、このメモリ領域が後で返された場合malloc
、アクセスすると問題が発生しPROT_NONE
ますか?