C# 为什么Marshal.SizeOf中的char为4字节?

C# 为什么Marshal.SizeOf中的char为4字节?,c#,data-structures,C#,Data Structures,为什么char在Marshal.SizeOf中需要1个字节,而bool需要4个字节。char的状态数不多于bool char c = '\x0011'; bool b = true; Console.WriteLine("char: " + Marshal.SizeOf(c).ToString() + "\n" + "bool: " + Marshal.SizeOf(b).ToString()); //char: 1 //bool: 4 您将看到Marsha

为什么char
Marshal.SizeOf
中需要1个字节,而bool需要4个字节。char的状态数不多于bool

char c = '\x0011';
bool b = true;
Console.WriteLine("char: " + Marshal.SizeOf(c).ToString() + "\n" 
                + "bool: " + Marshal.SizeOf(b).ToString());

//char: 1
//bool: 4

您将看到Marshal类如何利用它。尝试以下操作以查看编译器的想法:

 Console.WriteLine("char: " + sizeof(char).ToString() + "\n"
                 + "bool: " + sizeof(bool).ToString());
字符:2
布尔:1


Marshal.SizeOf()
应用于局部变量不是预期用途。基本思想是为互操作创建一个
结构
,然后填充的概念就变得相关了

Char是2个字节,而不是1;是的,查是atomic@BasileStarynkevitch在底层,一切都是一个字节序列。如果您的意思更直接,那么是否定的:每个字符都是2 bytesSo,所以您的问题实际上是关于Marshal.SizeOf的,这会改变情况。请注意,如果使用正常的
sizeof
运算符,char将得到2,bool将得到1。这不包括在类/结构中可能发生的(变量)填充。基本上,一切@harold都说了<代码>封送处理仅与互操作场景相关,即将数据传入/传出.NET。它不会告诉你东西在里面的大小。我现在真的很困惑。为什么char需要2个字节?因为unicode?是的。1字节字符在几年前就不流行了。NET字符和字符串全部使用Unicode。谢谢,如果您能解释一下为什么结构会应用填充,我将不胜感激?或者一个结构只是创建一个4字节的指针吗?
struct
s通常必须匹配非托管数据结构。有一些属性可以控制.NET结构的布局。