哪一個是最快的?值初始值vs Calloc vs手動初始化速度
我試圖測試的基本能力與這三種方法的速度:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
const unsigned long long ARR_SIZ = 0x4fffffff;
clock_t val_init_dur, calloc_dur, manual_dur;
clock_t cur = clock();
char* val_init = new char[ARR_SIZ]();
clock_t after = clock();
val_init_dur = after-cur;
delete[] val_init;
cur = clock();
void* calloc_init = calloc(ARR_SIZ, sizeof(char));
after = clock();
calloc_dur = after-cur;
free(calloc_init);
cur = clock();
char* manual_init = new char[ARR_SIZ];
for (unsigned long i=0; i < ARR_SIZ; i++)
manual_init[i] = 0;
after = clock();
manual_dur = after-cur;
delete[] manual_init;
printf("Value Initialization Duration: %d\n", val_init_dur);
printf("Calloc Initialization Duration: %d\n", calloc_dur);
printf("Manual Initialization Duration: %d\n", manual_dur);
fgetc(stdin);
return 0;
}
我的結果是:
值初始化時間:541
釋放calloc初始化時間:493
手動初始化持續時間:3424
但我有我的電流測試的幾個問題:
- 我不知道我是否適當隔離初始化的三種不同的方法
- 我沒有測試初始化數組的所有方法零(memset和malloc,我懷疑它像calloc一樣工作)
-
結果是以秒(ew!)爲單位的,它們被嚴重量化。 (無ms時間?) - ARR_SIZ的值不是VS '12(0x7FFFFFFF)允許的最大大小。我無法將該值設置爲高於上面代碼中的值,因爲儘管編譯了代碼,我仍然從第一次新調用中獲得了
bad_alloc
例外。 - 我懷疑有手動初始化通過反覆比我做到了
我斜體字上面的要點之一,因爲我很好奇,爲什麼是這樣一個數組更快的方法。
有沒有人有建議如何提高我的測試代碼?或者甚至更好,有沒有人能夠直接回答最快的問題?
另外:我已經關閉的編譯器優化
編輯:我更新了我的代碼,使用時鐘()。結果也更新了。
這些測試並不等同,因爲使用calloc和可能的值初始化,直到它被觸摸時纔會實際記憶0內存。而你手動將malloc'd內存設置爲0會導致它被觸及並因此分配。嘗試讀取值和calloc'd內存的每個元素,並且(假設優化器不會消除讀取,因爲值沒有使用),您應該得到相同的結果。 –
不要使用'time()'來進行這種測量。使用'clock()'或甚至更好''設施。 –
這是否在元素的基礎上工作?就像我訪問單個數組元素只有那個單個元素init'd爲0一樣?或者當一個元素被訪問時整個數組是被初始化的? – SyntaxTerror