The C Programming Language 一书在第 8.7 节中谈到了“最受限制的类型”,示例 — 存储分配器:
Although machines vary, for each machine there is a most restrictive type: if the most restrictive type can be stored at a particular address, all other types may be also. On some machines, the most restrictive type is a
double
; on others,int
orlong
suffices.
在他们的代码中,union
header
使用 long
类型对齐。
最严格的类型是什么意思?它可能是最大的类型(例如,double
),还是有其他方法?
最佳答案
CPU 通常要求(或工作效率更高)某些类型的数据存储在某些(2 的幂)值的倍数的地址中。此值称为数据的对齐。例如,CPU 可能要求四字节整数存储在四的倍数的地址(它们具有四字节对齐,或者四字节对齐).
最严格的类型,是指在这方面具有最严格要求的类型。所以如果例如long double
在某些机器上需要八字节对齐,并且没有其他类型需要比这更大的对齐,那么该机器上最严格的类型将是 long double
.
这对 malloc(3)
有意义返回满足最严格类型对齐要求的地址,因为这意味着返回的内存可用于存储任何类型。 malloc()
不知道内存将如何使用,所以无法适配。
虽然对齐要求往往会随着大小的增加而增加,但较大的数据类型不一定需要更高的对齐度。
(某些类型的数据可能需要比 malloc()
提供的更高的对齐。例如,许多 x86 SSE 指令使用按 16 字节对齐的数据 vector ,而例如 glibc 中的 malloc()
仅保证八位 -字节对齐。posix_memalign(3)
可用于动态分配内存,在 POSIX (*nix) 系统上具有更高的对齐要求。)
关于c - C中最严格的类型是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28916061/