Dan*_*Tao 11 .net int boolean nullable sizeof
所以,实际上有两个问题:
int(Int32)被指定为(显然)32位.怎么样int?(Nullable<int>)?我的直觉告诉我,对于整数,它将是32位,加上布尔值的8位,但实现可能比这更复杂.sizeof(int?); 但是作为int?托管类型,这是不允许的.我知道类型的大小可能与平台有关,而对于包含对其他对象的引用的对象,类似sizeof的操作会产生误导.但是,在给定当前环境的情况下,是否有办法获得托管类型的"基线"大小(即,新实例化实例的大小)?永远不要问这样的问题是非常重要的,因为你不会得到一个直接的答案.
但是,无论如何你做了:最小大小是0字节.当JIT优化器设法将值保存在CPU寄存器中时,您将获得该值.bool的下一个大小是2个字节?和字节?,HasValue为1个字节,值为另一个字节.你很少得到它,因为局部变量必须与一个4的倍数对齐.额外的2个字节的填充根本就不会被使用.
下一个尺寸是3个简称?和char ?,你现在得到1个字节的填充.
向下一个大跃进,int?需要5个字节,但填充增加到8个.
等等.你可以通过写一些这样的代码来找到它:
int front = 42;
bool? center = null;
int back = 43;
Console.WriteLine("", front, center, back);
Run Code Online (Sandbox Code Playgroud)
并使用调试器查看机器代码指令.注意ebp寄存器偏移量.并注意堆栈增长.
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |