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