![]() |
1
4
估计编译器发出的代码的效率是非常有用的。
例如,如果您使用
在您的示例中:
此外,在参与有关“编译后如何工作”的争论时,使用反汇编也是非常有用的,如 caf 指向 his answer to this question . |
![]() |
2
3
2-这段代码调用了一个函数,比如getRequiredFields(result,0,arItem)。你必须为你想要的处理器学习汇编语言。对于x86,请访问www.intel.com并获取IA32的手册。 |
![]() |
3
2
当你需要反汇编时:当你确实想知道CPU在执行你的程序时在做什么,或者当你没有用更高级语言编写程序的源代码时(在你的例子中是C++)。
您发布的代码片段为函数调用准备参数(通过获取并推送堆栈上的一些值,并将值放入寄存器)
|
![]() |
4
1
了解程序集级调试允许您了解源编译器程序集关系,从而能够预测编译器将生成的代码。stackoverflow上的许多人都说“profile”,但这更进一步,因为您了解了在何时使用什么源代码构造(我用C编写)以及避免使用什么源代码构造。我猜想这对C++来说更重要,它可以生成大量代码而不需要开发者怀疑任何东西。例如,有一个用于处理对象列表的标准类,它似乎没有缺点-只有几行代码和这一奇妙的功能直到你看到它生成的大量奇怪的过程调用。我不是说使用它们是错误的,我只是说开发者应该知道使用它们的利弊。重载操作符可能是很好的功能(对于像我这样的WYSIWYG程序员来说有点奇怪),但执行速度的代价是什么?如果你说“没什么”,我会说“证明给你看。” 调试时使用混合或纯汇编模式从来都不是错误的。困难的bug通常更容易找到,开发人员将学会编写更高效的代码。解释阵营(C#和Java)的开发人员会说,他们的代码与编译语言一样高效,但如果你知道汇编语言,你也会知道它们为什么错了,为什么它们完全错了。你可以微笑着想“是的,告诉我吧!” 在您使用不同的编译器之后,您将遇到一个具有最惊人代码生成能力的编译器。一个PowerPC编译器通过优化器的高级代码解释将三个嵌套循环压缩为一个循环。在那个写我是。。。好吧,让我们换一个联盟。 直到大约十年前,我还写了很多纯汇编代码,但是使用多阶段管道、多个执行单元和多个内核来与C编译器抗衡,这让我感到力不从心。另一方面,我知道编译器可以很好地处理什么,不应该处理什么:垃圾输入仍然等于垃圾输出。对于任何生成程序集输出的编译器都是如此。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |