关于c语言realloc函数分配的内存上限测试

1.测试环境

OS: Ubuntu 18.04, kernel 5.0.0-27, 64位
RAM:DDR3 8GB*2=16GB, 1600MT/S
CPU: Intel® Xeon® CPU E5-2670 0 @ 2.60GHz
编译器:gcc 7.3.0

2.测试方法之一,使用realloc函数不断分配更多的内存

2.1测试方法

2.1.1 首先使用malloc分配51.2MB内存

2.1.2. 然后反复调用执行下面的步骤,看看可分配的内存上限是多少.

2.1.2.1 调用realloc函数分配更大的空间,增量为51.2MB
2.1.2.2 realloc完成后,调用memset将分配的内存清0

2.2.测试结果

2.2.1.开始,可用内存13GB左右,swap分区使用率为0%
2.2.2.调用realloc,多数情况下,只需10-30微秒,少数情况则需要500多微秒.
2.2.3. memset则比realloc慢得多,且随着尺寸的扩大,memset越来越慢.
当尺寸达到8GB,需要1秒.
当尺寸达到13GB,需要1.5秒
当尺寸达到15.8GB,需要2秒.
当尺寸达到16.18GB,需要4.27秒
当尺寸达到16.23GB,需要5分钟

2.2.4交换分区的使用
当尺寸达到13.9GB左右,开始使用swap分区
当尺寸达到15.25GB,swap分区使用量达到236MB
当尺寸达到16GB左右,swap分区使用量达到1GB
当尺寸达到16.28GB左右,swap分区使用量达到1.3GB

3.测试方法之二,使用C++的vector.resize()方法,不断分配更大的内存

3.1.方法.反复调用vector的resize成员函数,每次分配更大的空间,增量为51.2MB

3.2.测试结果

3.2.1.开始,可用内存13GB左右,swap分区使用率为0%
3.2.2.调用vector的resize,速度与空间大小没有明显的关系,在大部分情况下,可以在0.02秒以内完成.
3.2.3.调用resize的参数超过13.1GB时,抛出异常std::bad_alloc
3.2.4.在整个过程,swap分区的使用量始终为0%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值