1
7
在单独的asm文件中编写一些函数, 呼叫 这些功能来自您的C/C++代码。或者直接在C/C++代码中编写内联程序集。 换句话说,你可以从一些C/C++代码中获取一些基本的ASM代码,但是在你开始调整它之后,你就删除了原来的C/C++代码。 代替 它与ASM代码一起使用,使用这两种方法之一。 |
2
7
为什么不在内联汇编程序中重写代码的关键部分而不修改输出?如何做到这一点的方法因编译器而异——检查编译器文档。 在MSVC:
在海湾合作委员会:
还要注意,在编译和优化之后进行ASM更改只适用于那些确切知道自己在做什么的人。编译器不仅以一种人类无法优化的方式(至少不是一个没有光计算器能力的人)优化结构,它还执行了一个我们可以做的更复杂的代码分析。 相信你的编译器。这是您使用过的最伟大的工具;)。 |
3
4
不 修改编译器生成的程序集代码。修改它,就像修改任何自动生成的代码一样,这正是您发现自己的原因,是一个非常糟糕的主意。 如果您希望通过在ASM中实现代码来手动优化代码的特定部分,则有两个选项:
它很好地演示了如何将C代码与ASM结合起来,共享变量。 |
4
3
如果您的编译器支持它,那么您可能正在寻找 inline assembly ? |
5
2
使用内联汇编的另一个很好的理由是:gcc样式的内联汇编为代码生成器提供了一系列信息(clobber、volatile等),代码生成器可以使用这些信息使您的汇编很好地适合(和内联!)进入你的C/C++代码,而不会失去优化的机会。 编辑: 例如,来自另一个答案的C代码:
生产:
变量foo和bar保存在寄存器中,甚至从未存储在堆栈中。 |
6
2
很抱歉,这不是对您问题的严格回答,但我相信制作编译器的人在ASM方面比我们大多数人都要好得多。因此,我更依赖于编译器做“正确的事情”,而不是在C++源代码中编写一些ASM代码。
另一个理由是我不使用至少inline asm(但有时我喜欢
还有最后一件事,你是否尝试过使用不同的算法进行优化,而不是假设GCC(它可以使用SSE_,无论什么_,当前的_版本优化)产生的ASM代码比你写的要差。 |
7
1
您可以链接到用汇编程序显式编写的模块,或者使用内联ASM。 |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
Daniel · C#轻松存储快速访问的大型位矩阵 6 年前 |
halbe · 优化音频DSP程序的numpy计算 6 年前 |
Afsara · 是否有任何方法不能优化我们的应用程序? 6 年前 |