int a[5] = {0};
typedef struct
{
int a[5];
} ArrStruct;
ArrStruct arrStruct;
sizeA = sizeof(arrStruct.a)/sizeof(int);
for (it = 0 ; it < sizeA ; ++it)
arrStruct.a[it] = 0;
是否用於環路初始化通過花費更多的執行時間?如果是這樣,爲什麼?
int a[5] = {0};
typedef struct
{
int a[5];
} ArrStruct;
ArrStruct arrStruct;
sizeA = sizeof(arrStruct.a)/sizeof(int);
for (it = 0 ; it < sizeA ; ++it)
arrStruct.a[it] = 0;
是否用於環路初始化通過花費更多的執行時間?如果是這樣,爲什麼?
它取決於編譯器和優化標誌。
在最近的海灣合作委員會(如4.8或4.9)與gcc -O3
(或者甚至可能-O1
或-O2
)它不應該的問題,因爲相同的代碼將被髮射(GCC更是把這將改變你的循環變成builtin_memset
優化其會進一步優化)。
在某些編譯器上,可能發生int a[5] = {0};
可能會更快,因爲編譯器可能會發出例如向量指令(或在x86 a rep stosw
)清除數組。
最好的辦法是檢查生成的(gimple representation和assembler)代碼(例如使用gcc -fdump-tree-gimple -O3 -fverbose-asm -mtune=native -S
)並進行基準測試。大部分情況並不重要。編譯時一定要啓用優化。
一般來說,不關心這樣的微觀優化;一個好的優化編譯器比你有時間編碼要好。
它取決於變量的範圍。對於靜態或全局變量,可以在編譯時完成第一次初始化,而循環運行在運行時,運行時。因此,沒有與前者相關的「執行」。
您可能會對this question(特別是this answer)的討論感興趣。
'int [5]'只有20個字節,你爲什麼要關心? –
它用於學術目的... –