1

我想清除一些虚拟内存,因为我需要从 elf 文件中加载段。

(我正在编写一个加载和执行ELF 文件的程序)。

据我了解,我必须使用munmap

unsigned int blok = sectionHeads[i].adr - (sectionHeads[i].adr % getpagesize());

if (munmap((void *)blok,getpagesize()) == -1) 
{ 
  printf("fail\n");
} 
else 
{ 
  printf("succ\n");
}

blok是我要从中释放内存的地址的倍数。(或者我认为,英语不是我的母语,所以我很可能误解了“多个”的含义)。

我想释放内存,因为稍后我需要那个空间。

当我运行程序时,它不会超出munmap();

我究竟做错了什么?

我在 munmap 文档中发现的唯一约束是地址参数必须是系统页面大小的倍数。

有没有更简单的方法来释放这个内存?

注意:项目要求是我在需要时释放内存,但没有说明如何。

4

1 回答 1

2

您可能正在取消映射运行代码的内存。您可以在调试器中通过在if语句处设置断点并将 的值blok与当前程序计数器进行比较来检查这一点。

于 2013-05-31T21:56:30.620 回答