微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在指令#pragma pack(n) 中,哪些值是n 的有效值?

如何解决在指令#pragma pack(n) 中,哪些值是n 的有效值?

我用谷歌搜索,发现 n= 1,2,4,8 只是预处理指令 Enter text: weasel Enter encryption key: 2 Enter 'e' for encryption or 'd' for decryption: e Here is your encrypted text: ygcugn Enter text: a Enter encryption key: 1 Enter 'e' for encryption or 'd' for decryption: d Here is your decrypted text: z Enter text: z Enter encryption key: 1 Enter 'e' for encryption or 'd' for decryption: e Here is your encrypted text: a 的有效参数。

有人能告诉我上述值以外的值有什么问题吗? (ex- n=3,5,等等为什么无效)?

上述值是唯一可以作为参数的值吗?

如何取 n 的值以及为什么?

我正在使用 GCC 编译器。

解决方法

以下是对齐必须是 2 的小幂的三个原因。

  1. GCC documentation 是这样说的:包的值是“总是要求是 2 的小幂。”

  2. C 2018 6.2.5 4 说对齐必须是 2 的幂:“每个有效对齐值都应该是 2 的非负整数幂。”子句中有关于最大对齐的附加文本(因此将其限制为 2 的小幂),但它很灵活。

  3. 内存使用二进制寻址和组织。从内存中获取数据使用地址位来激活内存设备中的部分并选择字或其他字节组中的字节。所以分组之间的对齐边界位于低位变化的地方。这意味着新组第一个字节的低 n 地址位为零,因此地址是 2n 的倍数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。