關於c語言realloc函式分配的記憶體上限測試

2021-10-23 03:16:33 字數 1002 閱讀 7107

2.2.測試結果

3.測試方法之二,使用c++的vector.resize()方法,不斷分配更大的記憶體

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.1.2.1 呼叫realloc函式分配更大的空間,增量為51.2mb

2.1.2.2 realloc完成後,呼叫memset將分配的記憶體清0

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.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%

C語言函式realloc

原型 extern void realloc void mem address,unsigned int newsize 語法 指標名 資料型別 realloc 要改變記憶體大小的指標名,新的大小 標頭檔案 include 有些編譯器需要 include 在tc2.0中可以使用alloc.h標頭檔案...

C語言realloc函式解析

在網上查了很多資料,終於大概知道了這個函式的原理 void realloc void ptr,size t size 作用 更改已經配置的堆記憶體空間,說白了在c語言中就是更改由malloc 函式分配的記憶體空間的大小。當需要將已分配的記憶體減小時,則返回原指標,僅僅是對應索引的記憶體空間減小了 當...

c語言中realloc 函式解析

realloc void ptr,size t size 更改已經配置的記憶體空間,即更改由malloc 函式分配的記憶體空間的大小。如果將分配的記憶體減少,realloc僅僅是改變索引的資訊。如果是將分配的記憶體擴大,則有以下情況 1 如果當前記憶體段後面有需要的記憶體空間,則直接擴充套件這段記憶...