【问题标题】:how to manually calculate the memory been used如何手动计算已使用的内存
【发布时间】:2012-10-09 17:15:59
【问题描述】:

有没有办法手动计算数组将要消耗的内存。

我在 64 位操作系统中使用 languaje C#

假设我有下一个数组:

int number[][]= new int[2][2];
number[0][0]=25;
number[0][1]=60;
....
...

所以我的第一个问题是,数组的每个维度都有相同的位分配?假设 number[0][0] 有一个 12 位的 asing(如果 12 位是正确的答案,我现在不知道)所以这将使第一行成为 24 位的内存 asing?

每个维度需要多少财政和虚拟内存?

如果我使用 int、double 或 string 作为数组,使用的内存有什么不同吗?

最后,如果我使用 GC.GetTotalMemory,我会得到与数组使用的内存总量相同的结果吗?

【问题讨论】:

  • int number[][]= new int[2][2]; 不是有效的 C#,您的意思是 int number[,]= new int[2, 2];
  • 看看锯齿状数组,在某些情况下,它们会胜过多维数组msdn.microsoft.com/en-us/library/2s05feca.aspx
  • 之前的数组实际上是一个锯齿状数组,这是我这样写的原因,它对我的​​程序效果更好,但我不打算解释漏洞交易

标签: c# memory-management


【解决方案1】:

您需要使用 sizeof 函数来获取分配给您的 Type 的字节数。

int number[][] = new int[2][];
for (int i = 0; i < number.Length; i++)
{
    number[i] = new int[2];
}

int size = sizeof(int) * number.Length * number[0].Length;

【讨论】:

  • 此外,不同类型使用的内存肯定存在差异。字符串是一个字符数组(每个大约 1 个字节),可以很长,一个 int(大约 4 个字节)不太大,但如果您不需要存储大量数字,您可以使用 short(大约 2 个字节) , double(大约 8 个字节)是 int 大小的两倍,可用于存储小数,但如果您担心空间问题,可以使用浮点数(大约 4 个字节)。
  • .NET 使用 UTF-16 编码,所以 char 每个是 2 个字节,而不是 1 个。
  • @BenjaminDangerJohnson 为答案提供了答案,但 int 数组中还有一个问题,每个维度有 4 个字节?在这个例子中,这意味着数组的第一行有 8 个字节长,总共有 16 个字节?
  • 4 个字节用于每个 int。要计算完整大小,请将 int 的大小(4 字节)乘以您分配的 int 数量(维度 1 长度 * 维度 2 长度 ... * 维度 n 长度)。在您的情况下,您有一个 2D 数组,它在所有方向上都是 2 (2 * 2),总长度为 4 个整数,4 个整数 * 每个整数 4 个字节 = 16 个字节。
猜你喜欢
  • 2016-09-05
  • 2016-10-16
  • 2020-01-14
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
相关资源
最近更新 更多