我想知道數組的大小。我想到了size * sizeof(item) + sizeof(pointer)
,但是爲了引用數組而分配了多少字節?數組的大小是否在內存中?
3
A
回答
8
字節數組的開銷是:
Architecture | Value Type Array | Reference Type Array
x86 12 16
x64 24 32
您可以
using System;
class Test
{
const int Size = 100000;
static void Main()
{
Console.WriteLine("Running at {0} bits", IntPtr.Size * 8);
Tester<string>();
Tester<double>();
Console.ReadKey();
}
static void Tester<T>()
{
var array = new object[Size];
long initialMemory = GC.GetTotalMemory(true);
for (int i = 0; i < Size; i++)
{
array[i] = new T[0];
}
long finalMemory = GC.GetTotalMemory(true);
GC.KeepAlive(array);
long total = finalMemory - initialMemory;
Console.WriteLine("Size of each {0}[]: {1:0.000} bytes", typeof(T).Name,
((double)total)/Size);
}
}
此代碼calc下這些值是一個修改後的版本從這裏Overhead of a .NET array?
顯然你必須在32位和64位執行它。
對於這個開銷,你必須添加:數組的元素(所以size * sizeof(element)
)加上至少一個你需要的數組引用(所以IntPtr.Size
)。
請注意,我注意到了一些不一致之處。如果我創建了double[1]
,那麼所以使用單個double的數組,每個數組都在8字節邊界上完美對齊,但所用空間似乎只有20個字節/數組(32位,因此12 + sizeof(double)) 。這顯然是不可能的,因爲20不能被8整除。我認爲GC.GetTotalMemory
是「忽略」物體之間的洞。這可能是一些字節/數組的額外開銷(取決於數組元素的類型)。對於byte[1]
,中等大小是16字節/數組(32位,所以12 + sizeof(byte)+ 3)。這似乎更加正確。
相關問題
- 1. Redis - 數據大小是否可以大於內存大小?
- 2. opencv調整大小函數是否存在最大數組大小限制?
- 3. 是否改變內存大小?
- 4. 流在內存中的大小是否與圖像的大小相同?
- 5. byte []數組的大小是否等於C#中數組的實際大小?
- 6. 內存中numpy跨步數組/廣播數組的大小?
- 7. 數組的大小是否協變?
- 8. 在內存中的數組大小在php
- 9. 是否可以設置stl :: deque的內部數組的大小?
- 10. Java類與數組內存大小?
- 11. R的預留內存是分配數組大小的兩倍
- 12. 是否可以獲取hsqldb內存數據庫的大小?
- 13. Ruby數組中的對象的大小是否會影響數組本身的內存使用量?
- 14. T-SQL IN運算符後面的數組是否存在最大大小?
- 15. Numpy:是否有數組大小限制?
- 16. 大型數組是否會完全用Java存儲在內存中?
- 17. 是否可以在C++中交換任意大小的數組?
- 18. 是否有必要在java中指定數組的大小?
- 19. 存儲在表中的數據是否區分大小寫?
- 20. 數字的大小(在內存中)是多少?
- 21. Cassandra數據庫行大小是否受可用內存限制?
- 22. 是最小的可用內存大小2字節,在JavaScript中?
- 23. cdef cython中的一個數組,在循環中更改大小,是否有內存問題?
- 24. 數組元素是否在內存中不斷保存?
- 25. 內存大小
- 26. 如何獲得最大的數組大小適合gpu內存?
- 27. ListView根據內容是否存在來自動調整大小
- 28. GD在調整大小時是否需要這麼多內存?
- 29. CSS3中是否存在列最小寬度和最大列數?
- 30. Java:一維數組是否總是在內存中連續?
使用垃圾收集類System.GC,並測試它的任何你想要的 –
請注意,可悲的是,我已經鏈接的其他問題並不涉及x64位。星期天我會嘗試做一些實驗。 – xanatos
做了一些實驗...在64位數組的開銷是:24位值型數組和32位參考型數組。 – xanatos