其实,我很愿意知道多少内存是由以下数据类型如何计算可空的大小<T>数据类型
INT消耗? =内存大小?
double? =内存大小?
bool? =内存大小?
任何人可以给我讲述了他们储存或使用方法的信息来计算其规模
其实,我很愿意知道多少内存是由以下数据类型如何计算可空的大小<T>数据类型
INT消耗? =内存大小?
double? =内存大小?
bool? =内存大小?
任何人可以给我讲述了他们储存或使用方法的信息来计算其规模
您是否想知道记忆体的消耗量?一个int? x
? MSDN说:
...公共语言运行库分配基于您的应用程序是 执行平台的 特性存储。在某些情况下,它尽可能将您声明的元素尽可能紧密地包装在一起,即 ;在其他情况下,它将内存地址与自然硬件边界对齐。此外,在64位平台上的存储分配不同于在32位平台上的 。
同样的考虑适用于复合数据类型 的每个成员,如结构或数组。此外,某些复合类型 还有额外的内存要求。例如,数组使用额外的 内存用于数组本身,也用于每个维度。在32位的 平台上,此开销当前为12个字节加上每个 维度的8个字节。在64位平台上,需求增加了一倍。您不能 依赖于简单地将 组件的名义存储分配相加。
除了包含在数据类型中的数据之外,引用任何基本或复合数据类型的对象还使用4个 个字节。
Mithrandir能否请你以一般方式解释以上内容,因为我想知道的是双重吗?(可为空)将占用32位计算机上的多少字节,以及在64位计算机上占用多少双倍(可空双精度)。 – 2013-04-25 13:59:59
实际尺寸可能因系统而异。您可以使用sizeof()在运行时获取实际值,但那又如何? – Mithrandir 2013-04-25 14:06:50
请尝试,如果你可以,因为我已经尝试过,但我不能我已经试过每一个愚蠢的把戏 – 2013-04-25 14:12:45
的答案,我相信,是here
基本上,增加的对大小非空的大小布尔。
您可以使用以下代码在运行时获取实际大小。返回的值将与数组int?[]
的元素对齐相同,该值与CLI的sizeof
操作码(ECMA-335分区I,第8.9.1节)返回的值一致。由于可为空的类型被视为引用类型,因此即使在不安全的上下文中,C#sizeof
运算符也不能用于此目的。相反,我们使用TypedReference
和一个2元素数组来计算相同的信息。
public static int SizeOf<T>()
{
T[] array = new T[2];
TypedReference elem1 = __makeref(array[0]);
TypedReference elem2 = __makeref(array[1]);
unsafe
{
byte* address1 = (byte*)*(IntPtr*)(&elem1);
byte* address2 = (byte*)*(IntPtr*)(&elem2);
return (int)(address2 - address1);
}
}
然后,您可以使用以下内容。
// This returns 8 on my test, but the runtime is free to change this to
// any value greater than sizeof(int)+sizeof(bool)
int nullableSize = sizeof(int?);
绝对错误的答案请不要误导上述代码将不会被编译 – 2013-04-25 14:06:11
当然它编译。您需要在项目的“构建”选项中勾选“允许不安全代码”。 – Andez 2016-04-11 12:36:50
它没有得到任何答复,必须有一个确切的答案,每个人只是从不同的博客复制和粘贴答案。他们不喜欢的事件 – 2013-04-26 03:54:18