相关疑难解决方法(0)

什么时候应该在汇编中使用显式对齐指令?

我花了一些时间进行汇编编程(特别是Gas),最近我学习了align指令.我想我已经理解了它的基础知识,但我想更深入地了解它的性质以及何时使用对齐.

例如,我想知道一个简单的C++ switch语句的汇编代码.我知道在某些情况下,switch语句基于跳转表,如下面几行代码所示:

    .section    .rodata
    .align 4
    .align 4
.L8:
    .long   .L2
    .long   .L3
    .long   .L4
    .long   .L5
    ...
Run Code Online (Sandbox Code Playgroud)

.align 4在下一个4字节边界上对齐以下数据,以确保获取这些内存位置是有效的,对吗?我认为这样做是因为在switch语句之前可能会发生导致错位的事情.但为什么实际上有两次调用.align?在调用.align时是否有任何经验法则,或者只要在新的数据块存储在内存中并且之前的某些内容可能导致错位,它是否应该完成?

对于数组,一旦数组占用至少32个字节,似乎就在32字节边界上进行对齐.以这种方式执行它是否更有效还是32字节边界的另一个原因是什么?

我很欣赏任何有关文学的解释或暗示.

assembly alignment

8
推荐指数
1
解决办法
9028
查看次数

标签 统计

alignment ×1

assembly ×1