关于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%