gpt4 book ai didi

embedded - 我的CPU不支持未对齐的内存访问是什么意思?

转载 作者:行者123 更新时间:2023-12-04 23:04:57 36 4
gpt4 key购买 nike

我刚刚发现我在(Cortex M0)上编写代码的ARM不支持未对齐的内存访问。

现在,在我的代码中,我使用了很多打包结构,并且从未收到任何警告或硬故障,所以当Cortex不允许不对齐访问时,Cortex如何访问这些结构的成员?

最佳答案

诸如gcc之类的编译器了解对齐方式,并将发出正确的说明来解决对齐问题。如果您有一个打包的结构,您将告诉编译器有关它的信息,以便它提前知道如何进行对齐。

假设您使用的是32位架构,但打包了一个struct,如下所示:

struct foo __attribute__((packed)) {
unsigned char bar;
int baz;
}

当访问 baz时,它将在32位边界上进行内存加载,并将所有位移到位置。

在这种情况下,它可能会给 bar地址的32位负载和 bar + 4地址的32位负载。然后它将应用一系列逻辑运算,例如shift和逻辑或/,最后得到32位寄存器中 baz的正确值。

查看程序集输出以了解其工作原理。您会注意到,在这些体系结构上,未对齐的访问将比对齐的访问效率低。

关于embedded - 我的CPU不支持未对齐的内存访问是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671595/

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