linux进程malloc最大,linux new / delete,malloc / free大内存块

如果这是一台32位计算机,则将拥有3Gb的地址空间供您使用-1Gb是为内核保留的,其中相当一部分地址空间将被共享库,exe文件,数据段等占用您应该查看/ proc / pid / maps以了解地址空间的布局.

很难知道有多少物理地址空间可用,您的所有系统进程,内核和其他进程都会吃掉它.假设这些总和不超过1Gb,您仍然可以使用3Gb.

可能正在发生碎片:

0Gb 3Gb

---------------------~------------------------------------

|Stuff | Heap,1.2Gb allocated stuff | free heap | Stack|

---------------------~------------------------------------

然后,您释放了大对象,但是在其他一些内存之间

分配,剩下的就是这个:

0Gb 3Gb

---------------------~------------------------------------------

|Stuff | Heap,1.2Gb free |small object(s) | free heap | Stack|

---------------------~------------------------------------------

如果您现在尝试分配更大的对象,则它将无法容纳在可用的1.2Gb空间中

而且也可能不适合自由堆空间,因为那可能没有足够的空间.

如果您大量使用堆栈,则可能是堆栈不断增长并占用了空间

否则可以用于堆空间-尽管默认情况下,大多数发行版将堆栈限制为8-10Mb.

使用malloc / realloc将无济于事.但是,如果您知道所需的最大对象的大小,则可以在启动时保留这么多的对象.该片永远都不应被释放/删除,而应该重新使用.但是,这是否会使您在其他地方陷入其他麻烦却很难确定-其他对象的可用空间会变小.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值