c - C中最严格的类型是什么意思?

标签 c architecture malloc long-integer memory-alignment

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 or long 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/

相关文章:

ruby-on-rails - Rails3 管理界面框架

c - 混合使用 mmap(2) 和 malloc(3) 的安全方法需要 : the result of mmap(2) must be continuous

python - 我如何从 python 中的字符串中读取定义的值,就像我在 C 中使用 scanf 所做的那样

c - 哪些事件会导致 ferror 返回非零值?

design-patterns - 移动开发架构和设计模式

c++ - 程序终止后动态分配的内存

c - 打印整个指针

Clion中默认创建C项目

c - C rand() 的问题

java - 绘画程序界面的OO设计