0

我不确定这是否是一个问题,但肯定是一种好奇心。我有一个 C DLL,它导出一个采用 32 位整数和一个布尔值 (stdbool.h) 的函数。导出的函数(stdcall)表示参数列表为8字节(4字节int,4字节bool)。此 C DLL 还包含一个使用布尔值的结构。检查sizeof(bool)表示 1 字节布尔值。

我有这个本机 DLL 的 .Net 包装器。编组结构时,我为每个布尔字段 UnmanagedType.U1 指定,一切正常,一切都正确对齐。我只使用了顺序布局,没有明确也没有任何偏移,也没有任何包装。

我的问题是,为什么布尔大小的明显差异?

4

1 回答 1

0

C 中所有小于“int”的函数参数都在调用中转换为“int”大小。这是因为每个参数都单独放置在堆栈上(在大多数架构中),因此它们被转换为堆栈单元大小,通常等于“int”的大小。

至于结构 - 没有任何东西被转换。尽管我们不应该忘记结构中的对齐。但这是另一个故事。

于 2012-10-31T16:06:08.893 回答