- 论坛徽章:
- 0
|
不会 leak 的, 一般这种要仔细考虑 leak 的程序都是一些长时间运行的服务, 稳定性很关键.
多进程进行服务从一定程度上可以减缓 memory leak 的问题. 因为子进程一旦退出那么 memory leak 的内存就被回收了. 当然应该尽量避免memory leak的问题
记得有说某些版本的c lib中free之后的内存不会立即还给系统, 而是继续等待给进程分配.
如果你不free, 内存是绝对不会还给OS, 除非进程退出. 如果malloc不还给系统, 那么这个内存其实还被进程使用着, 但是再一次malloc, 这些内存可能还能被分配给你. malloc如果需要更多内存会调sys_call的...然后malloc来管理这些内存. free也是在进程自己空间释放内存, c lib的程序会完成后续工作吧. (这个我不是很确定, 貌似是我看到过的...顺便求证下吧)
leak 是说你malloc出来的空间没有free, 而且因为指针变动, 无法将这些内存free掉. 这些内存在进程运行生命周期过程无法在被使用, 就是 memory leak 了. malloc 就可能因为没有足够内存重新调用sys_call去请求内存. 但是如果你把不用的内存 free 了, 那么malloc就可以把这个内存再一次分配给你. 所以 memory leak 一般就是进程运行时候, malloc的空间无法被free掉. 因为一般malloc的地址前面有关于分配这个地址空间的管理信息. 因此, 一旦这个地址丢失, 就无法free这空间了. 也就必须问OS申请新的空间. 但是OS很明白, 你退出必须把给你的资源都回收, 否则这绝对是个BUG OS...
[ 本帖最后由 Edengundam 于 2007-3-11 15:59 编辑 ] |
|