C# 从理论上确定结构数组占用的内存?
我有一个64位处理器。这将占用多少内存C# 从理论上确定结构数组占用的内存?,c#,memory,C#,Memory,我有一个64位处理器。这将占用多少内存 var x = new point[3]; public struct point { int x;//4 bytes int y;//4 bytes } 我的猜测是,堆栈将保存对堆的引用。因为我有一个64位处理器,所以引用本身应该是8字节 堆上的三个“点”将被初始化。所以这至少是24(8x3)字节 有没有办法从理论上确定x所占用的确切内存?您可以使用sizeof。。由于您想知道分配了多少内存(无论分配到哪里-实现细节): 如果您想包含
var x = new point[3];
public struct point
{
int x;//4 bytes
int y;//4 bytes
}
我的猜测是,堆栈将保存对堆的引用。因为我有一个64位处理器,所以引用本身应该是8字节
堆上的三个“点”将被初始化。所以这至少是24(8x3)字节
有没有办法从理论上确定x所占用的确切内存?您可以使用
sizeof
。。由于您想知道分配了多少内存(无论分配到哪里-实现细节):
如果您想包含引用的大小,只需将其添加到上即可。您可以相对轻松地计算出对象所使用的内存量-您就快到了 以下是参考类型(如
Array
)需要计算的大致片段列表:
- 对堆位置的引用(大小取决于x86/x64)
- 堆上对象的通用头-同步块+类型句柄(大小取决于x86/x64)
- 对象的所有字段(用于引用类型字段的大小取决于x86/x64)
- 对于每个引用类型,计数相应的对象
- 对于数组计数“元素数*元素大小(包括可能的对齐)”
- 中的链接集合
unsafe {
var sizeRequired = sizeof(point) * 3;
}