windows - 我可以一直假设 sizeof(GUID)==16 吗?

标签 windows guid sizeof

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/

相关文章:

.net - 如何在 .NET 中创建 12 个字符长的随机文件夹名称

C++ Placement 新模板

c++ - 调用 sizeof (*s.begin()) 安全吗?

c# - 如何取消共享共享打印机?

windows - 如何控制 Windows DLL 从应用程序导入哪些符号?

java - PHP 相当于 Java 中的 getLeastSignificantBits() 和 getMostSignificantBits 吗?

c++ - 指针的大小不指向任何内容

windows - 用于计算子目录中文件类型的批处理文件

ruby - 使用 Ruby 从 Windows 文件中提取选定的元数据

c# - 生成在合理时间内不重复的唯一编号的方法?