gpt4 book ai didi

c++ - 数据对齐 : Reason for restriction on memory address being multiple of data type size

转载 作者:太空狗 更新时间:2023-10-29 22:54:07 25 4
gpt4 key购买 nike

我了解数据对齐的一般概念,但我不了解的是对内存地址值的限制,强制为基础数据类型大小的倍数。

This answer很好地解释了数据对齐。

引用:

Let's look at a memory map:

+----+
|0000|
|0001|
+----+
|0002|
|0003|
+----+
|0004|
|0005|
+----+
| .. |

At each address there is a byte which can be accessed individually. But words can only be fetched at even addresses. So if we read a word at 0000, we read the bytes at 0000 and 0001. But if we want to read the word at position 0001, we need two read accesses. First 0000,0001 and then 0002,0003 and we only keep 0001,0002.

问题:

假设是真的,为什么“但是只能在偶数地址取词。”是真的吗?内存/堆栈指针不能指向示例中的 0001,然后从那里开始读取一个字的信息吗?

我们知道机器可以通过一次读取操作以 2 字节为单位读取内存(在示例 [0000, 0001] 或 [0002, 0003] 中)。因此,如果我的地址寄存器指向 0001(奇地址而不是偶地址),那么我可以在一次读取操作中直接从那里读取 2 个字节(即 0001 和 0002),对吗?

最佳答案

关于该陈述的假设不一定正确。我不想重复您链接到描述使用和高度偏好对齐访问的原因的答案,但有些架构确实支持未对齐的内存访问——例如 ARM(查看此 SO answer)。

但我认为,您的问题实际上归结为硬件架构,特别是数据总线设计,以及各个硅制造商的工程师设计的随附指令集。


某些 Cortex-M 内核明确允许您通过配置使用错误寄存器使 CPU 在对齐访问时触发异常,这意味着您可以在罕见的用例中“利用”未对齐的内存访问。

关于c++ - 数据对齐 : Reason for restriction on memory address being multiple of data type size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com