繁体   English   中英

对齐数据作为内存地址的目的是什么

[英]What's the purpose of aligned data for memory address

我了解物理内存是由对齐的4(32位)或8(64位)字节块访问的。

但是为什么我们需要对齐的数据作为内存地址,让我们说(在32位计算机中):
我有一个从地址0开始的char c(char占用一个字节,然后我有一个从地址1开始的整数i,因此当我要访问i时,计算机会得到i的地址为1,然后读取4直接来自地址1的字节。

因此,如果以这种方式工作,为什么我们需要在char c之后填充3个字节?

如您所说,“可以通过4或8个字节的对齐块访问内存”,具体取决于计算机的体系结构。 这意味着处理器仅在可被4或8整除的地址块上访问内存(我猜这与成本和设计复杂度有很大关系)。

让我们来说明你的例子:

struct foo {
    char c;
    int i;
};

假设foo在地址0x100的内存中对齐。 如果访问foo.c,则仅访问一个字节,但在后台,CPU从内存中读取了整个4字节的字,并且丢弃了该字中的下3个字节。

现在,如果您在内存位置0x101读取foo.i(长度为4个字节),则CPU将需要两个内存事务。 一个在地址0x100处,它获取前三个字节,然后另一个在地址0x104处,获取最后一个剩余字节。

最后,内存中对齐的数据可以节省不必要的内存事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM