作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的代码:
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/
我是一名优秀的程序员,十分优秀!