2011-07-14 24 views
3

有人可以解釋我與int(32位)(尤其是C/C++)相比,小數據類型如char(8位)或short(16位)的優點。小數據類型的優點

在我看來,它並沒有帶來任何好處。在32位機器上,因爲它的字大小始終爲32位。這是編譯器嗎?在某些情況下,一些小的類型可以合併到一個寄存器中,以節省內存?那麼,只適用於低於32位或/和內存很小的硬件體系結構的小數據類型呢?

另外我看到失敗的新目標被溢出的數據類型,所以我hink它不應該被輕易使用...

回答

2

即使機器有32位的字長,不意味着所有的數據類型都存儲在字邊界中,或者甚至是信息存儲的最小單位是字。假設你必須創建一個包含一千個字符的向量。如果你這樣創建它:

std::vector<char> v(1000); 

它將使用大約一千字節(通常)。如果假設最小的存儲單位是字,你可以聲明它,而不是像這樣(心想反正每個字符將使用一個32位字):

std::vector<int> v(1000); 

,但是這會給你周圍的4個字節* 1000 ,這是以前的聲明的四倍。

也就是說,有時候,根據你聲明你的類型的方式,它們會被打包,所以它們不會使用一個詞來存儲每條信息。在第一種情況下,vector<char>的編譯器/實現將創建一個1000字節的緩衝區來存儲所有打包的字符。

所以,答案就是優點是節省內存空間。

+0

謝謝你的回答! – Dudero

+0

非常歡迎。 –