windows header中GUID的定义是这样的:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
但是,没有定义没有包装。由于结构成员的对齐取决于编译器实现,因此可以认为此结构的大小可能超过 16 个字节。
如果我可以假设它始终为 16 个字节 - 我使用 GUID 的代码更加高效和简单。 但是,这将是完全不安全的 - 如果编译器出于某种原因在成员之间添加一些填充。
我的问题是否存在潜在原因?或者是 sizeof(GUID)!=16 实际上真的为 0 的场景的概率。
最佳答案
这不是官方文档,但可能是this article可以减轻你的一些恐惧。我想还有一个关于类似主题的,但我现在找不到了。
我想说的是 Windows 结构确实有一个打包说明符,但它是一个全局设置,位于头文件中的某处。它是 #pragma
之类的。而且它是强制性的,因为否则由不同编译器编译的程序无法相互交互 - 甚至无法与 Windows 本身交互。
关于windows - 我可以一直假设 sizeof(GUID)==16 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6949598/