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
}
}
Run Code Online (Sandbox Code Playgroud)
在GCC:
__asm__ ("movl %eax, %ebx\n\t"
"movl $56, %esi\n\t"
"movl %ecx, $label(%edx,%ebx,$4)\n\t"
"movb %ah, (%ebx)");
Run Code Online (Sandbox Code Playgroud)
另请注意,在编译和优化之后进行ASM更改只适用于那些完全了解他们正在做什么的人.编译器不仅以人类无法实现的方式优化结构(至少不是没有照明计算器能力的人),它还执行了我们可以做的更复杂的代码分析.
相信你的编译器.这是你曾经使用的最好的工具;).
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |