2011-07-13 195 views
2

以下哪個代碼最適合初始化數組?最佳初始化代碼

char szCommand[2048] ={0} 

char szCommand[2048]; 
memset(szCommand,0,2048); 
+0

只需在字符串末尾加上''\ 0'' –

+1

看到這個幾乎相同的問題http://stackoverflow.com/q/1998752/57428 – sharptooth

+1

@maanu,你需要多少性能好處? – Donotalo

回答

2

對於空終止字符串,在我看來,最佳的初始化這個

szCommand[0] = 0; 
+1

不是最優目的? – ybungalobill

+0

@ybungalobill,是的。我發佈了另一種方式,OP可能會發現它確定。 –

+2

關於將一個字節與2048字節設置爲零之間的差異沒有任何「目標」。如果這是一個字符串,則一個字節就足夠了。 –

2

任何像樣的編譯器應該發出兩種情況下相同的代碼。在memset的情況下,編譯器可以通過理解標準庫中函數的語義來消除函數調用。

+0

但是,某些編譯器將memset實現爲內部函數,而且情況正好相反,編譯器會將第一個代碼示例替換爲第二個代碼示例。無論如何,這兩種情況下都必須清除內存。 –

5

第二個不是初始化數組,它更像是賦值給它。我認爲如果以後會有什麼明顯的區別(不會有),你必須親自分析它,並且看到第一個版本可能會更快一點 - 但這只是在優化結束時。 過早的優化是所有罪惡的根源 - 只是DON「T想想

+0

+1對'tiiiiiny'。 :P – Donotalo

3

兩個版本之間的性能差別是如此微不足道(如果編譯器不優化掉的區別),我」 ð傾向於最可讀的一個去。

0

兩者都是一樣的,第一個版本是緊湊 - 而已。