c++ - alignas() 对 sizeof() 的影响 - 强制性的?
问题描述
这个程序:
struct alignas(4) foo {};
int main() { return sizeof(foo); }
返回 4,使用 GCC 10.1 和 clang 10.1,以及 icc 19.0.1。
这让我想知道 -以这种方式alignas()
影响是强制性的吗?sizeof()
即增加超出结构最初大小的大小?或者 - 这种变化只是实施的特权吗?
解决方案
alignas() 是否必须以这种方式影响 sizeof() ?即增加超出结构最初大小的大小?
是的。类的大小是根据该类型数组的元素之间的距离来定义的。数组元素之间没有填充(除了类型内的填充,因此是大小的一部分)。如果大小小于对齐,则相邻的数组元素不可能满足该对齐。
大小必须至少与对齐方式一样多,并且必须是对齐方式的倍数,并且对齐方式始终是 2 的幂。
推荐阅读
- php - 我的 URL 的最后一个参数正在拆分(我正在使用 zxing qr 扫描、php 以及前缀和后缀变量)
- flutter - 将 .sqlite db 复制到电话上的文档目录
- c - 如何调用存储在联合中的值
- angular - 在这段代码中结合“mergeMap”和“of”有什么用?
- java - Jenkins 电子邮件配置 - 错误“AuthenticationFailedException”
- scons - Scons PreAction 命令已打印但显然未执行
- sql - PostgreSQL - 显示每个排序组的最后 N 行
- azure - 在 AzureRM 中将 Find-AzureRmResource 替换为 Get-AzureRmResource 以标记资源
- node.js - node.js (i18in) 中的相对 URL
- python - 使用 SciPy/NumPy 循环有限概率权重