在整型類型?在C#中使用字節/短等的任何理由?
很多代碼要麼使用int/double/float。
我知道有.NET移動版本的喜歡,所以字節/短來自己的,但對於桌面應用程序是否有任何意義?當我做C++工作(遊戲編程)時,我非常清楚我使用的每種數據類型,儘管在C#/ Java工作中我沒有這種感覺。
如果我知道我的循環永遠不會超過字節邊界,那麼使用字節說我會有什麼好處嗎?
在整型類型?在C#中使用字節/短等的任何理由?
很多代碼要麼使用int/double/float。
我知道有.NET移動版本的喜歡,所以字節/短來自己的,但對於桌面應用程序是否有任何意義?當我做C++工作(遊戲編程)時,我非常清楚我使用的每種數據類型,儘管在C#/ Java工作中我沒有這種感覺。
如果我知道我的循環永遠不會超過字節邊界,那麼使用字節說我會有什麼好處嗎?
單個byte
與long
相比不會在內存方面產生巨大差異,但是當您開始使用大型數組時,這7個額外的字節將會產生很大的差異。
更重要的是,數據類型,幫助溝通開發者的意圖好得多:當你遇到你知道byte length;
爲確保length
的範圍是一個byte
的。
minor:`byte` vs`long`是7個額外的字節,而不是3個額外的字節。 – 2009-05-25 10:42:03
這是「使用正確的工具進行工作」的情況。如果您正在處理代表一個字節的內容,則使用byte
數據類型。例如,涉及字節流的很多代碼都需要使用字節數組。相反,如果您只使用任意整數,則使用int
或long
,如果它們大於int
可以處理的大小。
很多的理由使用byte
- 任何處理原始的二進制流(圖像,文件,序列化代碼等)將不得不在byte[]
緩存方面談。
雖然我不會使用byte
作爲計數器,但CPU可以更有效地處理int
。
隨着short
...好,當你有他們的陣列它可能會節省相當多的空間,但一般我只用int
。
使用小於CPU本機字大小的數據類型時,性能會有小幅下降。當一個CPU需要將兩個字節加在一起時,它將它們加載到(32位)字大小的寄存器中,添加它們,調整它們(切斷三個最高有效字節,計算進位/溢出)並將它們存回字節。
這是很多工作。如果你打算在一個循環中使用一個變量,不要使它小於CPU的原始單詞。
存在這些數據類型,以便代碼可以處理包含它們的結構,這是因爲大小限制,或者是因爲遺留API的原因,或者原因。
我認爲這個問題是在10多年前,通常的做法是考慮你的變量需要存儲什麼值,如果你存儲了一個百分比(0..100)你可能會使用一個字節(-128到127簽名或0到255無符號),因爲它對於工作來說足夠大,因此看起來不那麼「浪費」。
但是現在這些措施是不必要的。內存通常不是那麼重要,如果是這樣的話,你可能會被現代計算機擊敗,無論如何都要在32位字邊界(如果不是64)上對齊。
除非你存儲數千個這些東西的數組,否則這些類型的微優化(現在)是不相關的分心。
坦率地說,我不記得上一次我沒有使用一個字節的原始數據以外的東西,我想不出我最後一次使用什麼短路。
所以一般的答案是,一般使用 - 堅持int,但對於大量的數據(數組等...),那麼你至少應該考慮小數據類型? – Finglas 2009-05-25 10:45:29