2

boolが4バイトかかるのに、 charが1バイトを取り込むのMarshal.SizeOfはなぜですか。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
4

1 に答える 1

3

あなたはマーシャルクラスがそれをどうするかを見ています。これを試して、コンパイラがどのように考えるかを確認してください。

 Console.WriteLine("char: " + sizeof(char).ToString() + "\n"
                 + "bool: " + sizeof(bool).ToString());

char:2
bool:1

Marshal.SizeOf()ローカル変数に適用することは、意図された使用法ではありません。基本的な考え方は、struct相互運用機能を作成してから、パディングの概念が適切になるというものです。

于 2012-07-28T07:29:49.627 に答える