如果執行速度是重要的,應該使用這一點,2D陣列與結構(C++)
struct myType {
float dim[3];
};
myType arr[size];
,或者使用2D陣列作爲arr[size][index]
如果執行速度是重要的,應該使用這一點,2D陣列與結構(C++)
struct myType {
float dim[3];
};
myType arr[size];
,或者使用2D陣列作爲arr[size][index]
這取決於您的使用情況。如果你通常一起使用這三個維度,那麼struct組織可能是合理的。尤其是當單獨使用維度時,陣列布局最有可能帶來更好的性能:當代處理器不僅僅加載單個單詞,而是加載緩存行單元。如果僅使用部分數據,則會加載未使用的單詞。
並行處理也更容易獲得陣列布局,例如,使用SIMD操作。這在一定程度上是不幸的,因爲對象佈局通常是不同的。實際上,你使用的陣列可能是相似的,但如果你改變了東西變成float array[3][size]
事情變得不同了。
沒有區別的。選擇更可讀的東西。
除非你正在一個奇怪的平臺上工作,那麼這兩者的內存佈局將是相同的 - 對於編譯器來說,這是最重要的。
沒關係。無論在幾乎所有情況下,編譯器都會生成完全相同的代碼。唯一的區別是如果結構引發某種填充,但考慮到你有看起來不太可能的漂浮物。
唯一的區別是當你將某些東西傳遞給函數時。 當您使用數組解決方案時,您從不復制包含數組的數組,但僅傳遞數組地址。 如果在struct解決方案中沒有顯式傳遞結構地址,那麼結構總是會被複制。
您可能想要將2d數組映射到1d。可能更容易緩存
需要注意的另一件事是另一張海報提到:如果昏暗在結構中總是有3的大小,但集合實際上代表「紅色,綠色,藍色」或「 X,Y,Z「或」汽車,卡車,小船「,從維修的角度來看,你最好把它們拆掉。也就是說,使用類似
typedef struct VEHICLES
{
float fCar;
float fTruck;
float fBoat;
} Vehicles;
這樣,當你回來兩年調試它,或者別人有來看待它,他們不會去猜測什麼樣暗淡[0],暗淡[1 ]和dim [2]指的是。
爲什麼你認爲會有什麼區別?你是否按照特定的配置對它進行了計時? – 2012-02-06 21:00:13
這可能沒關係。但是,如果速度對你很重要,*測量*目標平臺上的兩種方法。 – 2012-02-06 21:00:32
如果速度很重要,請編寫最易維護的代碼,並讓編譯器爲您優化它。 (除非你進行了基準測試,並發現了一個瓶頸,當然,這是該規則例外的唯一良好藉口。) – 2012-02-06 21:01:18