gpt4 book ai didi

c++ - 4 字节对齐的指针是否使用任何填充?

转载 作者:行者123 更新时间:2023-11-30 02:05:54 25 4
gpt4 key购买 nike

我最近偶然发现了一个“hacky”答案(this one),其中提到因为(我假设是 32 位)C/C++ 指针通常是 4 字节对齐的,所以每个指针的最后 2 位总是零。我不明白为什么会这样。为什么不使用所有 32 位来表示地址?

请忽略我上面链接的实际答案的优点。我只对关于 2 个 LSB 的观察感兴趣。

最佳答案

您可能会注意到该声明中的关键词“通常”。 “通常”并不意味着“总是”。如果某件事并不总是正确的,您就不能假设它是正确的并且只是砍掉最后两位。

大多数指向事件对象的指针将至少对齐 4 个字节。但是,您可以创建一个 char 数组,这些元素将是字节可寻址的。 99% 的时间都会发生某事并不意味着您可以忽略未发生的最后 1%。

大多数指针至少对齐到 4 个字节的原因是大多数指针是指向对象或基本类型的指针,它们本身至少对齐到 4 个字节。具有 4 字节对齐的事物包括(对于大多数系统):intfloatbool(是的,真的)、任何指针类型,以及其大小或更大的任何基本类型。

任何包含其中之一的对象必须至少对齐到该对象的对齐方式。因此,存储 int 的对象对齐到 4 个字节。包含指针的对象至少对齐 4 个字节。等等。很少有对象不包含这些基本类型之一。

这就是为什么。您要指向的绝大多数数据类型都至少有 4 个字节的对齐。

关于c++ - 4 字节对齐的指针是否使用任何填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com