关于c语⾔realloc函数分配的内存上限测试
关于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++的size()⽅法,不断分配更⼤的内存
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%
>resize函数c++
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论