如何确定C99中所需的最大对齐

FSM*_*axB 5 c c99 memory-alignment

是否有一种可移植的方式只依赖于C99标准提供的方法来找出任何数据类型所需的最大所需对齐.

就像maxalign_t在C++ 11中一样.

什么我目前做的是计算最小公倍数(lcm的比对)int,long int,long long int,double,void *size_t作为确定排列的尽力而为的方式.

更新: 我目前需要这个来实现一个包装器,malloc它在内存块的开头存储元数据,并返回一个地址高于malloc返回地址的指针.

fuz*_*fuz 3

确实没有一个好的方法可以做到这一点,这就是maxalign_tC11 引入的原因。不过,我无法想象一个普通系统中存在比存在更高对齐要求的类型intmax_t,因此您不妨使用它,并在maxalign_t不可用时为 99% 的系统获得正确的答案。

  • @FSMaxB 更新我之前的评论:要真正偏执,您可以使用 `intmax_t`、`long double`、`void *` 和 `void (*)()` (即最大积分的最大对齐要求) 、最大浮点数、通用数据指针和函数指针类型)。 (3认同)