gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:31:12 24 4
gpt4 key购买 nike

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

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

    .section    .rodata
.align 4
.align 4
.L8:
.long .L2
.long .L3
.long .L4
.long .L5
...

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

对于数组,似乎只要数组占用至少 32 字节,就会在 32 字节边界上进行对齐。这样做是否更有效,或者 32 字节边界还有其他原因吗?

我很感激任何有关文学的解释或提示。

最佳答案

由于编译器内部的工作方式,有多个 .align 指令;一个就足够了,只发出一个需要额外的工作。

就总体而言,这是一个复杂的主题,但这里有一篇针对 Intel x64 的文章,讨论了您感兴趣的一些问题:

其他架构可能有很大不同。

关于assembly - 什么时候应该在汇编中使用显式对齐指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567938/

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