首页 > 解决方案 > 在 64 位架构上读取/写入 32 位数据类型

问题描述

我有一个不清楚的问题,我需要对此进行更多澄清。当我存储整数4字节等数据类型时。那么64位架构的处理器如何读取或写入一个大小为4字节的整数,因为我知道处理器读取/写入一个字。这里有填充大小吗?我将感谢对此的一些澄清,因为我无法理解它是如何工作的,或者我可能错过了一些我必须阅读更多关于它的东西。它是否因编译器而异或因语言而异?非常感谢。

标签: c++cpu-architectureprocessor

解决方案


据我所知,处理器读/写一个词

面向字的 CPU 可以加载/存储 64 位块,但也可以加载/存储更窄的块。(存储寄存器的低部分,或使用零扩展或符号扩展加载)。对于为大多数硬件编写设备驱动程序,以及实现不浪费大量缓存占用空间的有效大小的整数以及某些类型的字符串处理,执行窄存储的能力是相当重要的。

一些 CPU(如 x86-64)根本不是真正面向字的,并且对于每个操作数大小具有大致相同的效率。尽管 x86-64 机器代码中的默认操作数大小是 32 位。

所有主流的 64 位架构本身都支持 32 位操作数大小,甚至包括积极 64 位并选择不提供 8 位或 16 位加载/存储的 DEC Alpha。(有关更多详细信息,请参阅现代 x86 硬件不能将单个字节存储到内存中吗?

可能有一些非常模糊的 64 位架构,其中只有64 位加载/存储是可能的,但这似乎不太可能。另请注意,大多数现代 64 位 ISA 从 32 位 ISA 演变而来。


推荐阅读