2009-05-25 55 views
7

在整型類型?在C#中使用字節/短等的任何理由?

很多代碼要麼使用int/double/float。

我知道有.NET移動版本的喜歡,所以字節/短來自己的,但對於桌面應用程序是否有任何意義?當我做C++工作(遊戲編程)時,我非常清楚我使用的每種數據類型,儘管在C#/ Java工作中我沒有這種感覺。

如果我知道我的循環永遠不會超過字節邊界,那麼使用字節說我會有什麼好處嗎?

+0

所以一般的答案是,一般使用 - 堅持int,但對於大量的數據(數組等...),那麼你至少應該考慮小數據類型? – Finglas 2009-05-25 10:45:29

回答

10

單個bytelong相比不會在內存方面產生巨大差異,但是當您開始使用大型數組時,這7個額外的字節將會產生很大的差異。

更重要的是,數據類型,幫助溝通開發者的意圖好得多:當你遇到你知道byte length;爲確保length的範圍是一個byte的。

+1

minor:`byte` vs`long`是7個額外的字節,而不是3個額外的字節。 – 2009-05-25 10:42:03

3

這是「使用正確的工具進行工作」的情況。如果您正在處理代表一個字節的內容,則使用byte數據類型。例如,涉及字節流的很多代碼都需要使用字節數組。相反,如果您只使用任意整數,則使用intlong,如果它們大於int可以處理的大小。

3

很多的理由使用byte - 任何處理原始的二進制流(圖像,文件,序列化代碼等)將不得不在byte[]緩存方面談。

雖然我不會使用byte作爲計數器,但CPU可以更有效地處理int

隨着short ...好,當你有他們的陣列它可能會節省相當多的空間,但一般我只用int

4

使用小於CPU本機字大小的數據類型時,性能會有小幅下降。當一個CPU需要將兩個字節加在一起時,它將它們加載到(32位)字大小的寄存器中,添加它們,調整它們(切斷三個最高有效字節,計算進位/溢出)並將它們存回字節。

這是很多工作。如果你打算在一個循環中使用一個變量,不要使它小於CPU的原始單詞。

存在這些數據類型,以便代碼可以處理包含它們的結構,這是因爲大小限制,或者是因爲遺留API的原因,或者原因。

8

我認爲這個問題是在10多年前,通常的做法是考慮你的變量需要存儲什麼值,如果你存儲了一個百分比(0..100)你可能會使用一個字節(-128到127簽名或0到255無符號),因爲它對於工作來說足夠大,因此看起來不那麼「浪費」。

但是現在這些措施是不必要的。內存通常不是那麼重要,如果是這樣的話,你可能會被現代計算機擊敗,無論如何都要在32位字邊界(如果不是64)上對齊。

除非你存儲數千個這些東西的數組,否則這些類型的微優化(現在)是不相關的分心。

坦率地說,我不記得上一次我沒有使用一個字節的原始數據以外的東西,我想不出我最後一次使用什麼短路。

相關問題