C++ 在64位体系结构上读取/写入32位数据类型

C++ 在64位体系结构上读取/写入32位数据类型,c++,cpu-architecture,processor,C++,Cpu Architecture,Processor,我有一个不清楚的问题,需要进一步澄清。当我存储数据类型时,比如整数4字节。然后,64位体系结构的处理器如何读取或写入一个4字节大小的整数,正如我所知,处理器读取/写入一个字。这里有填充尺寸吗。我会感谢一些澄清,因为我无法理解它是如何工作的,或者我错过了一些我必须多读的东西。不同的编译器,不同的语言,它是不同的吗?非常感谢 据我所知,处理器读/写一个字 面向字的CPU可以加载/存储64位块,但也可以存储较窄的块。(存储寄存器的低位,或加载零扩展或符号扩展)。对于为大多数硬件编写设备驱动程序,对于实

我有一个不清楚的问题,需要进一步澄清。当我存储数据类型时,比如整数4字节。然后,64位体系结构的处理器如何读取或写入一个4字节大小的整数,正如我所知,处理器读取/写入一个字。这里有填充尺寸吗。我会感谢一些澄清,因为我无法理解它是如何工作的,或者我错过了一些我必须多读的东西。不同的编译器,不同的语言,它是不同的吗?非常感谢

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

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

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

所有主流64位体系结构本机都支持32位操作数大小,甚至包括DEC Alpha,它是64位的,并且选择不提供8位或16位加载/存储。(有关更多详细信息,请参阅)


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

在32位系统上使用
char
怎么样?还是短的?那对你也很重要吗?如果不是,为什么上述问题如此重要?您通常不应该对语言如何存储数据感兴趣。试着详细说明你为什么需要这个,你可能会得到更好的帮助。没有问题,但这有助于我理解我上次关于大学的讲座。非常感谢你的澄清。然后字符1字节(整数4字节)将以1字节(4字节)的形式存储在内存中,或者以8字节(字的大小)的形式存储,并使用填充大小?@abddde:当然,通常不使用填充,因为CPU可以有效地支持这些大小。当然,您可以在您关心的任何特定C实现中检查
sizeof(int)
CHAR\u-BIT
(例如,在其上有多个64位RISC ISA以及x86-64)>现在有点清楚了。如果你允许我问你,我还有一个问题。我无法在评论中添加图片,因此我已将其添加到问题中。你能解释一下为什么我们需要一个填充大小的字符而不是uint32\u t,为什么我们需要填充大小为6而不仅仅是2的整数16\u t。谢谢,你看了之后,洛蒂会删除照片的。因为它与原文无关question@abdddde:结构成员被填充到其
alignof(T)
,因此
uint32\u T
对象对于
uint32\u T
是正确对齐的。填充并不仅仅是“因为char”,而是因为下一个成员具有4字节的对齐方式。