【 在 ziqin 的大作中提到: 】
: 一个process从共享内存中申请了一块内存,但是突然死机,系统直接杀掉process,所有析构函数都没有调用,所以shared_ptr, unique_ptr都没用。如果是私有内存,系统自动释放内存,但是共享内存系统不会自动释放。这种内存泄漏怎么解决?
进程退出, 无论是正常还是异常, 不存在内存不回收的问题。
因为, 应用程序分配,操作的是虚拟内存, 使用的是都只对应用程序才有意义的虚拟地址,
程序在被清理的时候, 操作系统就已经把这个应用程序的虚拟地址空间销毁了,所以,不存在
所谓的泄露。
你所说的, 其它程序并不知道这个程序占用的内存是否还处于占用。 甚至, 异常退出程序导致的共享内存
数据状态不一致。这个问题是存在的, 这个需要在服务程序设计的时候,需要做一定的处理。
据我所知, 一些共享资源句柄的在应用程序的崩溃退出会对共享的资源状态产生影响,比如,一些信号量会
产生abandon状态。 socket会给对端发送 reset状态之类的, 文件句柄也可能有类似的结果。
对应这类问题, 通过对共享资源的精细设计和对句柄使用的状态检查,是可以发现问题的。
对这类问题, 最麻烦的不是程序崩溃退出, 麻烦的是产生死锁进程, 或者类僵尸进程, 这种才是彻头彻尾的锁定泄露效应。
--
FROM 115.171.245.*