gpt4 book ai didi

linux - ARM 不会产生未对齐的异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:09 24 4
gpt4 key购买 nike

这是我的代码:

 char data[5]  = {0x1, 0x2, 0x3, 0x4, 0x5 };
int *ptr = (int *)(data + 1);
int value = *ptr;

printf("address of data= %lu\n",data);
printf("address of data +1 = %lu\n",data+1);

当我使用 gcc -Wcast-align for ARM 进行编译时,它会发出警告“cast increases required alignment of target type”。

但是当我在 ARM 处理器上运行它时,它不会生成未对齐的访问异常

printf 显示数据所在的地址是 4 的倍数,因此 data+1 是一个奇数地址,应该会产生未对齐的异常。

我将/proc/cpu/alignment 设置为 3。在 dmesg 中没有收到任何消息。

为什么我没有得到异常?

最佳答案

在 ARMv6+ 未对齐访问模型生效的情况下,内核 always clears the SCTLR.A bit (注意 if (cpu_is_v6_unaligned())... 部分)因为在实践中,对于在硬件中可以正常工作的事情引发异常没有什么意义。如果未对齐则完全无效的指令(如 LDM/STM)只会出现异常。

关于linux - ARM 不会产生未对齐的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909691/

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