gpt4 book ai didi

c - sizeof 保证位对齐的一个实现

转载 作者:行者123 更新时间:2023-12-01 15:05:53 25 4
gpt4 key购买 nike

define 语句是:

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

有人告诉我目的是位对齐。
我想知道它是如何工作的,提前谢谢。

最佳答案

上面的宏只是将 n 的大小对齐到最近的大于或等于 sizeof(int) 边界。

将值a 对齐到最近的大于或等于任意 边界b 的基本算法是

  1. a 除以b 四舍五入,然后
  2. 再次将商乘以b

在无符号(或正值)领域,第一步是通过以下流行技巧实现的

q = (a + b - 1) / b
// where `/` is ordinary C-style integer division (rounding down)
// Now `q` is `a` divided by `b` rounded up

结合第二步,我们得到以下结果

aligned_a = (a + b - 1) / b * b

aligned_a 中,您可以获得所需的对齐值。

将此算法应用于手头的问题,将得出以下 _INTSIZEOF 宏的实现

#define _INTSIZEOF(n)\
( (sizeof(n) + sizeof(int) - 1) / sizeof(int) * sizeof(int) )

这已经足够好了。

但是,如果您事先知道对齐边界是 2 的幂,则可以通过将除法+乘法序列替换为简单的按位运算来“优化”计算

aligned_a = (a + b - 1) & ~(b - 1)

这正是 _INTSIZEOF 宏的上述原始实现中所做的。

这种“优化”可能对某些编译器有意义(尽管我希望现代编译器能够自行解决)。但是,考虑到上面的 _INTSIZEOF(n) 宏显然旨在用作编译时表达式(它不依赖于任何运行时值,除非 VLA 对象/类型作为 n),以这种方式优化它没有多大意义。

关于c - sizeof 保证位对齐的一个实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175748/

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