[英]How to reach best performence with different data types?
我正在處理自定義類,它包含日期和時間。 該課程的主要目標是達到最佳表現。 我的目標平台是Linux目前,我有這樣的成員
Year - int
Month - int
Day - int
Hour- int
Min - int
Sec - double (because I need milisecs as well).
我現在想的是太多改變類型跟隨
Year - unsigned short
Month - unsigned char
Day - unsigned char
Hour- unsigned char
Min - unsigned char
Sec - unsigned char
Milisec - unsigned short
這給了我2 + 1 + 1 + 1 + 1 + 1 + 2 = 9個字節。 正如你已經猜到的那樣,我想讓我的班級適合8字節(沒有其他成員)。 那么解決它的最佳方法是什么,合並(例如秒和毫秒)並使用位掩碼來檢索值? 它會影響性能嗎? 如果用戶將整數傳遞給某個setter,那么類型轉換會影響性能嗎?
謝謝你提前。
這里有多種選擇。 最緊湊的方法是使用整數時間戳。 雖然解壓縮它需要一些處理。 另一種選擇是使用C ++位域來更緊密地打包。 例如,月只需要4位,第5位,分鍾和秒6位。 它應該讓事情變得有點慢,但只是在理論上。 這一切都取決於您擁有的這些日期的數量以及您要對它們執行的處理量和類型。 在某些情況下,將struct
緊密地打包到位域中會增加性能,因為更高的內存吞吐量和更好的緩存利用率。 在其他情況下,位操作可能變得更加昂貴。 就像表現一樣,最好不要猜測,而是衡量 。
這里最簡單的方法是將一對sec和millisec放入一個int(兩個字節)。 你不需要單獨的Sec(unsigned char)和Milisec(unsigned short),因為你可以將0到60000之間的數字放入一個unsigned short中。
我們稱之為milliSecPack(unsigned short)。
milliSecPack = 60 * Sec + Milisec;
和
Sec = milliSecPack / 1000;
Milisec = milliSecPack % 1000;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.