从理论上确定结构数组占用的内存?

时间:2013-07-04 23:48:22

标签: c# memory

我有一个64位处理器。这会占用多少内存?

var x = new point[3]; 

public struct point
{
   int x;//4 bytes
   int y;//4 bytes
} 

我的猜测是,堆栈将保存对堆的引用。由于我有一个64位处理器,因此引用本身就是8个字节。

在堆上三点"点"将被初始化。所以这至少是24(8x3)个字节。

有没有办法从理论上确定x占用的确切内存?

2 个答案:

答案 0 :(得分:1)

您可以使用sizeof ..因为您想知道分配了多少内存(无论分配的位置 - 实现细节):

unsafe {
    var sizeRequired = sizeof(point) * 3;
}

如果您想要包含引用的大小,可以将其添加到..

答案 1 :(得分:1)

您可以相对轻松地计算出对象使用的内存量 - 您几乎就在那里。

以下是您需要为Array

等参考类型计算的近似件列表
  • 对堆位置的引用(大小取决于x86 / x64)
  • 堆上对象的通用标头 - 同步块+类型句柄(大小取决于x86 / x64)
  • 对象的所有字段(用于引用类型字段的大小取决于x86 / x64)
  • 为每个引用类型计数相应的对象。
  • 对于数组计数“元素数量*元素大小(包括可能的对齐)”

因此粗略计算缺少标题和字段(如“长度”)。

详情见许多来源,如: