0

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

var x = new point[3]; 

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

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

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

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

4

2 回答 2

1

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

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

如果你想包括参考的大小,你可以添加它。

于 2013-07-04T23:55:58.240 回答
1

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

以下是您需要计算的参考类型的大致列表,例如Array

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

所以你粗略计算缺少标题和字段(如“长度”)。

详细信息包含在许多来源中,例如:

于 2013-07-05T00:03:43.803 回答