2010-12-19 180 views
4

哪一個是最快/至少內存消耗這兩者的選項:陣列結構或陣列的結構的

struct { 
int index; 
char string[10]; 
} a[10]; 

struct { 
int index[10]; 
char string[10][10]; 
} a; 

第一個是顯然更易於使用和實行。我也不得不提到我將動態分配它們。但是哪一個會跑得更快或者耗時最少?

謝謝!

+0

可能存在很小的差異,這取決於問題中未提供的信息(例如,您使用的是什麼C實現,包括什麼編譯器選項,更重要的是您實際上對結構做了什麼)。速度不是C結構的屬性。我能想到的最常見的事情是,前者在很多實現上會變得更大一些,可能是160個字節,相對於140個。但是,祝你好運,但實際上檢測到任何性能差異。 – 2010-12-19 13:11:49

+0

爲什麼要在第二個結構中使用索引數組?如果你想解決一個特定的字符元素,那麼你只需要知道數組的範圍。存儲大小會不會更簡單?前兩句爲 – mmccomb 2010-12-19 13:14:30

回答

3
struct { 
    int index; 
    char string[10]; 
} a[10]; 

將爲每個a[]項目引入填充。

第二種解決方案將只引入一次填充。

如果你打算在a[]分配大量的項目,那麼你將支付一個更大的域名覆蓋的價格(更不用說額外的解引用)。

2

不要打擾過早的優化。使用容易理解/維護的人。由於這是C,性能差異幾乎不明顯。

+2

+1,最後一句爲-1。只要項目的數量固定爲10,這在任何語言中都不會顯而易見,但是當這個數字變大時,參考位置效應會發揮作用,因此性能很大程度上取決於任務。 – 2010-12-19 14:44:47

1

第二個可能會更小的內存方式,因爲上面的sizeof是8,而不是5,因爲padding(假設int是32位)。

至於哪個更快,我會說這取決於你在做什麼;第二個是面向數據設計的典型示例(不要與數據驅動設計混淆)。請看這篇文章:http://gamesfromwithin.com/data-oriented-design

編輯:這就是說,我同意米蘭在這裏(在另一個答案) - 不要打擾優化過早,或根本不打擾。兩者都足夠快;我之前沒有強調這一點,因爲我想你可能需要嵌入式系統,這可能很重要。