簡體   English   中英

避免數組索引提升以期獲得更好的性能

[英]avoiding array index promotion in hopes of better performance

我有一個巨大的整數數組,這些整數不大於0xFFFF 因此,我想節省一些空間並將它們存儲為unsigned short

unsigned short addresses[50000 /* big number over here */];

后來我會使用這個數組如下

data[addresses[i]];

當我只使用 2 個字節來存儲我的整數時,它們在用作數組索引時被提升為 4 個或 8 個字節(取決於架構)。 速度對我來說非常重要,因此我是否應該將整數保存為unsigned int以避免在類型提升上浪費時間? 這個數組可能會變得非常龐大,我也想節省一些空間,但不以性能為代價。 我應該怎么辦?

與 C 樣式 arrays 相關的任何事情通常都會被編譯到使用 memory 尋址的機器指令中,而您將無法編譯該架構,從而試圖節省數組索引的空間。

如果有的話,您可能會破壞編譯器可能想要實現的任何優化。

500 萬個 integer 值,即使在 64 位機器上,也需要大約 40 MB RAM。

雖然我確信您的代碼會做其他事情,但這並沒有那么多 memory 犧牲性能。

由於您首先選擇將所有這些值保留在 RAM 中,大概是為了速度,所以不要破壞它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM