2011-07-30 58 views

回答

3

我相信在這種情況下,「標稱」是指包含在這些數據類型中的實際數據佔用的字節數,不包括CLR用於跟蹤值的任何存儲,例如,當值類型被裝箱時發生的堆分配。

編輯

在閱讀鏈接的文章中,我注意到以下部分:

內存消耗

當你聲明的基本數據類型,它是不是安全假定其內存消耗與其名義存儲分配相同。這是由於以下考慮因素:

存儲分配。公共語言運行庫可以根據執行應用程序的平臺的當前特徵來分配存儲。如果內存幾乎已滿,它可能會將您聲明的元素儘可能緊密地包裝在一起。在其他情況下,它可能會將其內存地址與自然硬件邊界對齊以優化性能。

平臺寬度。 64位平臺上的存儲分配與32位平臺上的分配不同。

所以基本上這是說,每個值類型總存儲爲標稱存儲+任何填充可以用於在字邊界+可能堆分配對準值 - 再次,在運行時決定。

2

「Nominal」是指運行時可自由分配儘可能多的空間,這對於給定變量是有意義的。儘管一個short只需要兩個字節來存儲它的數據,但運行時可能會爲該變量分配4個字節。例如,存儲在32位機器寄存器中的短片「佔用」4個字節。類似地,堆棧的工作方式可能與傳遞一個short作爲參數時使用的4個字節的堆棧空間相同,例如,爲了保持字對齊。內存訪問速度通常更快,因爲內存在自然的字邊界上對齊,所以運行時可能會「浪費」空間來對齊內存。在64位機器上,相同的場景可能每個使用8個字節。

相關問題