首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sysv共享内存,会自动销毁吗?

sysv共享内存,会自动销毁吗?
EN

Stack Overflow用户
提问于 2012-07-17 00:34:34
回答 3查看 2.1K关注 0票数 4

如果不这样做,Unix中分配的共享内存会自动销毁吗?

例如,一个进程创建了这个段,另一个进程使用了它。现在它们都因为某种原因崩溃了,是那个段导致了内存泄漏吗?

EN

回答 3

Stack Overflow用户

发布于 2012-07-17 00:42:40

通常不会。

如果您使用的是SysV共享内存(例如,shm_open),则不可以。这是我强烈建议不要使用它们的几个原因之一。

如果您正在对一个文件执行mmap操作以获取共享内存,那么该文件显然不会自行消失。与任何其他文件一样,您必须显式地对其执行unlink操作才能使其消失。如果你已经这样做了,那么你已经准备好了。

票数 4
EN

Stack Overflow用户

发布于 2012-07-17 05:58:23

这取决于您为片段提供的持久性。根据经验,如果您通过shm_open (或键)给它命名,它将是持久的。因为这表明它将在您关闭创建它的进程后继续存在,除非您以某种方式“删除”它,即执行shm_unlink。这是在完全不同的进程之间共享数据段的唯一方法。

因此,如果你这样做,你真的必须小心清理东西。对于这样的持久段,最好的策略是让所有进程最初打开一个文件描述符,然后在每个进程都连接到时立即取消链接。段将一直存在,直到它的最后一个文件描述符关闭。

非持久段可以直接使用mmap匿名映射。当你的进程不复存在时,它们就会消失。

票数 1
EN

Stack Overflow用户

发布于 2012-07-17 00:40:18

不是的。应显式丢弃已分配的共享内存段。

用于列出碎片内存段和删除内存碎片的有用命令行工具:ipcsipcrm。最后一个可以用于ex。用于当所有使用它的程序都崩溃时删除一个段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11508616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档