当它更喜欢使用宏时,为了实现更高效的方案? 据我所知,当我们使用宏时,我们会花费更多的二进制代码,而且会浪费一些运行时间。所以它更喜欢在代码中编写相关的宏。
(我知道宏的优点是简单的程序员代码,我问效率)
由于
答案 0 :(得分:2)
宏观有效吗?为什么不呢?它只是让您免于再次编写相同的代码。让我们在Windows中说你发送WM_COMMAND很多次,而不是写这个:
mov ax, HiWord
ror eax, 16
mov ax, LoWord
每次,你把它放到一个宏中:
MAKEDWORD MACRO LoWord,HiWord
mov ax, HiWord
ror eax, 16
mov ax, LoWord
ENDM
现在你所要做的就是: MAKEDWORD somenumber,somenumber,结果将在eax中传递给函数。预处理器将用其代码替换MAKEDWORD的所有实例。使用宏的缺点(至少我觉得是这样),如果你多次使用它,你会得到"代码膨胀",如果你要去,你最好把宏改成一个函数多次使用它。
答案 1 :(得分:1)
对于当前的处理器(至少类似于x86),我无法想象当宏提高效率时,从加速执行的角度来看。可以比较编译器使用哪些技巧来生成对特定处理器有效的代码 - 可以通过更改命令,寄存器等来实现相同的操作。使用宏,您可以坚持具体的寄存器,命令,它们的顺序;所有这些都没有提高效率。值得注意的例外是当宏执行命令时,特定汇编程序不知道。
相反,现在可以在某些宏处理器的输出上使用中间语言(如LLVM所做的那样),并根据所需的调整将它们转换为机器语言。但这本身并不是宏观用法:)
答案 2 :(得分:0)
它与装配无关。宏用于保存键入,在某些情况下可以允许您在一天内编写更多代码。或者在一天内调试更多代码。或者在一天内维护更多代码。出于完全相同的原因,您可以在C中使用与ASM相同的宏。同样地,您可以使用函数,在许多情况下,函数会花费您在宏上运行分支和堆栈的运行时,但您的宏可能会被编写为使得它们也花费您一些东西。
如果不是由公司或项目编程标准驱动,则归结为个人偏好。一些人线性编程,一旦某些代码块(与语言无关)在多个地方输入两次,并且存在可能被更改的风险,具体取决于它可能被放入宏中的风险或功能。通常只需剪切并粘贴程序中的第一个传递,并且在调试时必须更改IF,然后创建一个函数,然后用函数替换多个位置。另一个极端是提出无数实用功能的大门。实用函数分层在实用函数等上。这样主程序可能超长5行,每个函数就像十几行一样,都调用其他辅助函数。现实处于中间位置。这一切都归结为打字和打字,初始开发,调试和维护的副作用。你做的打字越少,你完成的工作就越快。
答案 3 :(得分:0)
当指令序列极短时,你应该使用宏,因为它可以节省call
和return
的一些周期。