【发布时间】:2016-03-01 07:26:31
【问题描述】:
我是 C# 新手。
我试图了解为什么结构大小会增长。
即:
struct Test
{
float x;
int y;
char z;
}
Test struct 的大小实际上是 10 个字节(float=4, int=4, char=2)。
但是当我尝试使用 Marshal.SizeOf(..) 方法获取 sizeof 结构时,我得到了 12。
在 C++ 中我做了 pragma pack(1) 来防止这种情况,但我如何在 C# 中做到这一点?
另一个问题:
当我尝试将测试结构转换为字节数组时,如果结构不是[Serialize],我得到大小为 12 字节的字节数组作为例外(或不是),但如果结构是[Serialize],我得到大小为170 字节,为什么会这样?
谢谢! :)
【问题讨论】:
-
当我尝试将 Test 结构转换为字节数组时你是怎么做的?
-
如果结构不是 [Serialize] 我转换是用这个方法stackoverflow.com/questions/3278827/… (检查的答案),如果 soi 用stackoverflow.com/questions/628843/… 转换它(最后一个答案)
-
请记住,如果您使用 Marshaller 或序列化 - 您不是在测量结构的大小。您正在测量非托管等效项或序列化形式的大小。两者都不一定与结构本身的大小有关。
-
@Damien_The_Unbeliever,我不使用 Marshal 来知道 serazlied 结构的大小。
-
我的意思是
Marshal.SizeOf:“返回的大小是非托管类型的大小。对象的非托管和托管大小可以不同”