2012-10-09 76 views
-2

是否有任何手動計算數組將要消耗的內存的方式。如何手動計算已使用的內存

我在64位操作系統

讓說我有下一個陣列使用languaje C#:

int number[][]= new int[2][2]; 
number[0][0]=25; 
number[0][1]=60; 
.... 
... 

所以我的拳頭的問題是,該陣列的每個維度具有相同的位asignation ?可以說數字[0] [0]有12位asing(如果12位是正確答案,我現在不用),所以這會使第一行成爲24位內存?

每個維度需要多少費用和虛擬內存?

如果我使用int,double或string作爲數組有沒有使用內存的差異?

最後如果我使用GC.GetTotalMemory我會recibe數組使用的內存總數相同的結果?

+0

'int number [] [] = new int [2] [2];'是無效的C#,你的意思是int數[[]] = new int [2,2];'? – cdhowie

+1

看看在某些情況下鋸齒陣列,他們將超越多維陣列 http://msdn.microsoft.com/en-us/library/2s05feca.aspx – MethodMan

+0

數組之前是真實的鋸齒陣列這reazon我寫這樣,它對我的​​程序來說效果更好,但是我不打算解釋這個問題。 – JUAN

回答

1

您需要使用sizeof函數來獲取有多少字節分配給您的類型。

int number[][] = new int[2][]; 
for (int i = 0; i < number.Length; i++) 
{ 
    number[i] = new int[2]; 
} 

int size = sizeof(int) * number.Length * number[0].Length; 
+0

此外,不同類型的內存在使用上存在明顯差異。一個字符串是一個字符數組(每個字節大約1個字節),可以很長,一個int(大約4個字節)不是很大,但如果不需要存儲大量數字,則可以使用short(大約2個字節) ,一個double(大約8個字節)是int大小的兩倍,可用於存儲小數,但如果您擔心空間,則可以使用浮點數(大約4個字節)。 –

+0

.NET使用UTF-16編碼,所以'char'是每個2字節,而不是1。 – xxbbcc

+0

@BenjaminDangerJohnson要求答案,但在int數組中有一個更多的隊列4個字節是每個維度?在這個例子中,這將意味着該數組在第一行中的長度是8個字節,總共16個字節總數是多少? – JUAN