存在有关通过mmap分配mem的代码
void *ret = mmap(NULL, 4 * 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
当进程正常退出时,内存将返回到os吗?
我刚刚发现很难,没有进程[[munmap()的mmap()也会导致泄漏,如果进程不是终止,但会继续运行。事后看来,这似乎很明显。
虽然连续几天调查内存泄漏,但我现在意识到我不应该完全依靠Valgrind来找到原因。当Valgrind报告根本没有泄漏时,我感到非常震惊,而我只能看到ps报告的VSZ部分关于我的过程稳定增长的消息。
然后在拼命地进一步搜寻之后,最终的言论here使我走上了正确的轨道:
如果您的程序处于稳定状态,但您的VSZ不断增加,则可能会出现某种分配泄漏。严格来说,这可能不是内存泄漏;您可能会忘记取消映射文件或卸载动态加载的代码或其他内容。
并且正如this SO topic中明确指出的那样,Valgrind不会报告
mmap()
泄漏。