如果您不这样做,在 Unix 中分配的共享内存会自动销毁吗?
例如,一个进程创建了该段,另一个进程使用它。现在它们都因某种原因崩溃了,那段是否导致内存泄漏?
如果您不这样做,在 Unix 中分配的共享内存会自动销毁吗?
例如,一个进程创建了该段,另一个进程使用它。现在它们都因某种原因崩溃了,那段是否导致内存泄漏?
一般不会。
如果您使用的是 SysV 共享内存(例如shm_open
),则不需要。SysV IPC 原语都不会自行清理;您总是必须明确地清理它们,或者使用ipcrm
. 这是我强烈建议不要使用它们的几个原因之一。
如果您要mmap
ping 一个文件以获取共享内存,那么该文件显然不会自行消失。像任何其他文件一样,你必须明确地unlink
让它消失。如果你已经这样做了,那么你就准备好了。
这取决于您给予该细分市场的持久性。根据经验,如果您通过shm_open
(或键)给它一个名称,它将是持久的。这表明它会在您关闭创建它的进程后持续存在,除非您以某种方式“删除”它,即执行shm_unlink
. 这是您可以在完全不同的进程之间共享段的唯一方法。
所以如果你这样做,你真的必须小心清理东西。这种持久段的最佳策略是让所有进程最初打开一个文件描述符,然后在每个人连接后立即取消链接。该段将一直存在,直到它的最后一个文件描述符被关闭。
非持久段可以直接使用匿名映射mmap
。随着您的流程不复存在,它们将消失。
不可以。分配的共享内存段应该被明确地丢弃。
用于列出粉碎内存段和删除的有用命令行工具:
ipcs
和ipcrm
. 最后一个可以用于ex。当所有使用它的程序都崩溃时删除一个段。