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 如果當前記憶體段後面有需要的記憶體空間,則直接擴充套件這段記憶...