1

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ますか?

4

2 に答える 2