Atm*_*ons 2 c++ optimization assembly
不是说我现在处于那种情况,但我只是对答案感兴趣......
假设你有一些用C/C++编写的代码,你想通过在ASM中修改它来手动优化它.
如果您在C/C++中更改代码并从源代码重新编译,会发生什么.当然,刚编译文件的优化会丢失.您如何避免每次编译项目时都需要重做这些优化?您是否为需要优化的部件创建单独的源文件以使其不那么复杂?或者是否有某种自动工具来做到这一点......?猜猜你不能使用diff/patch这个......
请分享您的经验,谢谢
您可以在单独的ASM文件中编写一些函数,并从C/C++代码中调用这些函数.或者直接在C/C++代码中编写内联汇编.
换句话说,您可以从一些C/C++代码开始获取一些基本的ASM代码,但是在开始调整它之后,您将使用这两种方法之一删除原始C/C++代码并将其替换为您的ASM代码.
为什么不在内联汇编程序中重写代码的关键部分,而不是修改输出?如何做到这一点的方法因编译器而异 - 请查看编译器文档.
在MSVC中:
// asm_overview.cpp
// processor: x86
void __declspec(naked) main()
{
    // Naked functions must provide their own prolog...
    __asm {
        push ebp
        mov ebp, esp
        sub esp, __LOCAL_SIZE
    }
    // ... and epilog
    __asm {
        pop ebp
        ret
    }
}
在GCC:
 __asm__ ("movl %eax, %ebx\n\t"
          "movl $56, %esi\n\t"
          "movl %ecx, $label(%edx,%ebx,$4)\n\t"
          "movb %ah, (%ebx)");
另请注意,在编译和优化之后进行ASM更改只适用于那些完全了解他们正在做什么的人.编译器不仅以人类无法实现的方式优化结构(至少不是没有照明计算器能力的人),它还执行了我们可以做的更复杂的代码分析.
相信你的编译器.这是你曾经使用的最好的工具;).
| 归档时间: | 
 | 
| 查看次数: | 707 次 | 
| 最近记录: |