Chinaunix

标题: malloc()申请内存能否自动释放 [打印本页]

作者: shell_albert    时间: 2012-07-19 11:27
标题: malloc()申请内存能否自动释放
如果在linux下用C写了一个非常简单的小程序
就是用malloc()申请一块很大的动态内存
但是在程序退出时不释放
那么,这块内存会不会自动释放?
还是再等下次重启才能被释放??


作者: _Rayx    时间: 2012-07-19 11:31
回复 1# shell_albert


    系统会帮你搞定的。
作者: liuiang    时间: 2012-07-19 12:50
如果系统不搞定,那黑客就太好当了。
作者: InMySin    时间: 2012-07-19 21:27
stackoverflow 有比较详细解释,现代操作系统应该会帮你回收内存的。。。
但是如果写个不断申请内存的程序,系统最终用完内存,要用swap,会怎么办,有没有人试过。。?
作者: jetking    时间: 2012-07-19 22:08
内核会oom-kill掉这个进程
作者: sorawa    时间: 2012-07-20 11:21
:wink: 那进程独立性意义就没了,内存留在系统里。。
作者: safedead    时间: 2012-07-20 15:57
jetking 发表于 2012-07-19 22:08
内核会oom-kill掉这个进程


那个oom-killer往往不会干掉这个进程
某次我的程序吃了4G内存,内核把所有已经mount的分区瞬间全给umount了(没有sync)
程序崩溃前的关键的错误日志全没了
没有SWAP分区,内存用完后,内核立即变成了疯狗,误杀一大片
作者: file3    时间: 2012-07-20 19:47
你先看看exit函数会做什么事吧。另外,你没有调用exit。编译器会给你调用exit族中的另外一个函数。
作者: tyutdatou    时间: 2012-07-21 20:56
操作系统会回收的。不过自己还是自己释放。释放了内存,也要把指向这块内存的指针指向NULL,防止程序不小心使用。回复 1# shell_albert


   
作者: smallbear_2008    时间: 2012-07-22 10:04
会自动回收,我们的程序里面 有启动就申请内存的,而且会一直使用下去,所以我们自己不会去释放,等到程序被退出,系统才会回收。我们自己不会处理
作者: fanasy    时间: 2012-07-22 10:06
自己写个程序试一下不就可以了
作者: yifangyou    时间: 2012-07-22 11:30
回复 4# InMySin
我测试过,当程序把swap分区都用完了,系统会自动把进程杀掉,这样保护系统正常运行

   
作者: InMySin    时间: 2012-07-22 11:35
回复 12# yifangyou
hi,你好,你的程序怎么样的阿?
试试我这个呢?我今天才试试的,大家一起来搞懂下linux的分配策略,我的swap几乎没有变化,都是不短new了,
http://bbs.chinaunix.net/forum.p ... =3760411&extra=

   
作者: yifangyou    时间: 2012-07-22 12:12
回复 13# InMySin

就是写了个程序不断申请内存,或者一次性申请比实际内存+swap还大的内存
   
作者: InMySin    时间: 2012-07-22 12:24
回复 14# yifangyou


    但是这样申请可以吗? 你申请的比 实际+swap 还大,还能成功返回?
能申请多少次呢? 最后错误是?
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc 这个吗?
作者: yifangyou    时间: 2012-07-22 12:29
我用的是C,一直malloc,理论上malloc不够内存时应该会报错,但是实际上到那个时刻之前,程序已经被系统杀掉了
作者: wonderall01    时间: 2012-07-31 15:18
回复 16# yifangyou
正解。


   
作者: guo_4224    时间: 2012-08-01 11:52
不停地申请内存会被kill掉啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2