- 主题:共享内存中的内存泄露
一个process从共享内存中申请了一块内存,但是突然死机,系统直接杀掉process,所有析构函数都没有调用,所以shared_ptr, unique_ptr都没用。如果是私有内存,系统自动释放内存,但是共享内存系统不会自动释放。这种内存泄漏怎么解决?
--
FROM 220.191.38.*
情况2
问题是,就算知道了对方挂了,怎么知道对方占用了哪块内存?就算设计了数据结构,又不能保证申请内存+跟新结构 这个操作是原子的
【 在 Bernstein 的大作中提到: 】
: "从共享内存中申请了一块内存"是什么意思?
: 1)是该进程调用create file mapping这样的系统api创建了一块共享内存吗?这种情况,进程退出的时候资源会全部释放,包括共享内存
: 2)还是另一进程创建了一块共享内存,而当前进程从这块共享内存占用了一块来使用?这种情况需要自己设计数据结构来跟踪使用共享内存的进程,并定期扫描确定进程是否处于活动状态
: ...................
--
FROM 115.193.190.*
内存块是可以打开啊,但是对方在块上类似new了一块,然后挂了,也没存new出来的是哪一块,怎么办?
【 在 gameplayer 的大作中提到: 】
: shmget和shm_open都可以获取到之前创建的共享内存块,注意看手册,比如shm_open的
: 手册:
: shm_open() creates and opens a new, or opens an existing, POSIX shared memo
: ...................
--
FROM 115.193.190.*
不能保证申请内存+跟新跟踪结构 这个组合操作是原子的
【 在 gameplayer 的大作中提到: 】
: 对,加上pid后,可以在进程启动获取到共享内存时检查是否有“泄漏”的内存,这样对
: 正常运行影响较小
:
: ...................
--
FROM 115.193.190.*
都说了,不能保证跟 new+更新跟踪信息 是原子的
--
FROM 115.193.190.*