linux 用户进程结束后 malloc申请的内存会自动释放吗,进程退出后malloc的内存是否会被释放??...

linux下使用exit()函数退出进程,那么这个进程中使用malloc申请的内存会被系统回收吗?,如果使用kill函数呢?

|

当一个进程退出后,不管是正常退出或者是异常退出,操作系统都会释放这个进程的资源。包括这个进程分配的内存,打开的文件等等。

用malloc分配的内存属于这个进程使用的内存,在进程退出后,当然会释放。操作系统如果连这个都做不到,那它还能做什么?

4楼引用的那段英文:

Memory obtained with malloc() must be returned to the operating system with a call to free() in order to prevent memory leaks.

是指在一个进程内,必须用free将malloc取得的地址返还给操作系统,以避免内存泄露。而如果进程已终止,就没有这个问题了。

|

我测试一下,不能说是标准的,但可以有这样的结论:进程(Linux)退出时,所申请的内存会自动释放。

#include

#include

#include

void show(struct sysinfo *_sys)

{

printf("Total usable main memory size %dnAvailable memory size %dn",_sys->totalram, _sys->freeram);

printf("Amount of shared memory %dnMemory used by buffers %dn",_sys->sharedram,_sys->bufferram);

printf("Total swap space size %dnswap space still available %dn", _sys->totalswap, _sys->freeswap);

printf("Number of current processes %dn", _sys->procs);

printf("Memory unit size in bytes %ldn",  _sys->mem_unit);

}

main()

{

static char suc[]="------------- alloc successful ! --------------",

fai[]="--------------- Fail to alloc ! ----------------";

struct sysinfo _sys;

char *pt;

sysinfo(&_sys);

show(&_sys);

pt=(char *)malloc(80000000); /* 此值可以增大,以强化测试效果 */

if(pt){ strcpy(pt, suc);  puts(pt); }

else puts(fai);

sysinfo(&_sys);

show(&_sys);

}

不断地反复运行,得出的结果差不多。

|

Total usable main memory size 2117382144

Available memory size 90734592

Amount of shared memory 0

Memory used by buffers 95215616

Total swap space size 0

swap space still available 0

Number of current processes 86

Memory unit size in bytes 1

------------- alloc successful ! --------------

Total usable main memory size 2117382144

Available memory size 90734592

Amount of shared memory 0

Memory used by buffers 95215616

Total swap space size 0

swap space still available 0

Number of current processes 86

Memory unit size in bytes 1

//释放了~

|

当然都会,OS会程序所有的内存都回收的

要是不回收,崩溃的程序一多系统就崩溃了

|

内存泄露的前提是进程一直在运行;进程一旦推出,所占的整个虚拟内存都被销毁,所有内存资源都会被系统回收。

|

一般情况下不会,在编程时这种情况是不允许的

但对于某些操作系统会有定时的垃圾处理机制,也就是说会定时的扫描系统中是否有这种垃圾数据,如果有系统会自动的把他们释放掉,但这又要增加系统的开销。

|

讨论这个很好,我也在实践和探讨中。

DOS肯定自动释放在结束运行时。

|

Windows 也不会。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值