如果不这样做,Unix中分配的共享内存会自动销毁吗?
例如,一个进程创建了这个段,另一个进程使用了它。现在它们都因为某种原因崩溃了,是那个段导致了内存泄漏吗?
发布于 2012-07-17 00:42:40
通常不会。
如果您使用的是SysV共享内存(例如,shm_open),则不可以。这是我强烈建议不要使用它们的几个原因之一。
如果您正在对一个文件执行mmap操作以获取共享内存,那么该文件显然不会自行消失。与任何其他文件一样,您必须显式地对其执行unlink操作才能使其消失。如果你已经这样做了,那么你已经准备好了。
发布于 2012-07-17 05:58:23
这取决于您为片段提供的持久性。根据经验,如果您通过shm_open (或键)给它命名,它将是持久的。因为这表明它将在您关闭创建它的进程后继续存在,除非您以某种方式“删除”它,即执行shm_unlink。这是在完全不同的进程之间共享数据段的唯一方法。
因此,如果你这样做,你真的必须小心清理东西。对于这样的持久段,最好的策略是让所有进程最初打开一个文件描述符,然后在每个进程都连接到时立即取消链接。段将一直存在,直到它的最后一个文件描述符关闭。
非持久段可以直接使用mmap匿名映射。当你的进程不复存在时,它们就会消失。
发布于 2012-07-17 00:40:18
不是的。应显式丢弃已分配的共享内存段。
用于列出碎片内存段和删除内存碎片的有用命令行工具:ipcs和ipcrm。最后一个可以用于ex。用于当所有使用它的程序都崩溃时删除一个段。
https://stackoverflow.com/questions/11508616
复制相似问题