揭示空类对象的大小
确定属于空类的对象的大小可能看起来像是一个微不足道的查询,但它隐藏了有趣的复杂性。
在 C 中,空类本质上是占位符,不含任何数据成员或方法。传统观点可能认为这样的对象不应该占用任何内存空间。然而,事实并非如此。
谜题:零或非零大小?
乍一看,期望一个空类对象似乎是合理的大小为 0 字节。毕竟,它不包含有形信息。然而,尝试引用或分配一个空类对象的指针表明它必须具有非零大小。
揭示实验
通过执行一个简单的程序创建一个空类对象并输出其大小,很明显该对象的大小确实为 1 字节。这种行为在各种编译器中都是一致的,包括 Visual C 和 Cygwin-g。
1 字节 Enigma 的奇怪案例
最初的惊喜源于预期空类对象占用的大小等于机器字(通常为 32 或 64 位)。但是,出于对齐考虑,1 字节大小分配是合理的。
由于空类对象不包含实际数据,因此其对齐无关紧要。这使得编译器能够为对象分配单个字节,即使底层架构需要对非空对象进行更大的对齐。
为什么不是零字节?
虽然空类对象没有相关数据,但它仍然必须拥有唯一的地址。这种必要性源于以下基本规则:不同的对象必须具有不同的地址。如果一个空类对象的大小为 0 字节,则多个对象可能会占用相同的地址,这将违反此原则。
结论
看似微不足道的任务确定空类对象的大小的方法揭示了 C 语言固有的细微差别。尽管不包含显式数据,空类对象需要非零大小以确保唯一地址并符合对齐约束。
以上是为什么空的 C 类对象的大小为 1 字节?的详细内容。更多信息请关注PHP中文网其他相关文章!