Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从理论上确定结构数组占用的内存?_C#_Memory - Fatal编程技术网

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

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。。由于您想知道分配了多少内存(无论分配到哪里-实现细节): 如果您想包含

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

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)
  • 对于每个引用类型,计数相应的对象
  • 对于数组计数“元素数*元素大小(包括可能的对齐)”
因此,您可以粗略计算缺少标题和字段(如“长度”)

详细信息包含在许多源代码中,如:

  • 中的链接集合

@TGH-huh?关于“堆栈上的结构”语句的任何链接/推理显然,您知道的内容比See:Implementation detail中描述的要多……当然,您还必须考虑同步块索引和类型指针等。但是,在托管环境中,了解这些内容的确切大小有什么可能的用途是另一个问题。。
unsafe {
    var sizeRequired = sizeof(point) * 3;
}