c - 通过 mmap 分配的内存没有 munmap 会在进程退出或终端后导致泄漏

标签 c linux gcc memory-leaks mmap

有关于通过mmap分配内存的代码

void *ret = mmap(NULL, 4 * 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);

当进程正常退出时,内存会归还给操作系统吗?

最佳答案

根据manunmap 下:

The region is also automatically unmapped when the process is terminated.

这听起来很合理,因为内存被添加到虚拟内存中的进程页面,虚拟内存在终止时被释放。

Opengroup没有就这个问题说任何话。

如果系统没有释放内存您可以尝试设置一个 at_exit 来清除任何仍然分配的内存映射,如果您可以找到指向它的指针,这些内存映射仍然有效。

关于c - 通过 mmap 分配的内存没有 munmap 会在进程退出或终端后导致泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040770/

相关文章:

c - 初始化程序不是常量...我知道,但我觉得这应该可以,为什么不行

c - 交叉编译时添加-O2选项导致展开回溯失败

c - 获取 C 程序的平均运行时间

linux - dropbear如何禁止登录三次被拒绝的用户IP

linux - 如何在共享 Linux 主机上安装 Node js 并设置 "hello world"网站?

c++ - 由于库的包含语句,无法通过 GCC 编译使用库 (FFmpeg) 的 C 程序

无符号整数和有符号整数的比较运算

c - 使用存储在 C 数组中的像素值反转灰度图像

c++ - 不与共享库共享所有类

gcc - "int64var = int32var * int32var"中的计算没有像预期的那样溢出。为什么?