2011-09-27 78 views
-2

我的问题是专门针对Windows C++编译器和Visual Studio,但我被邀请去采访一份财务工作,他们希望有人能够编写实时多线程代码,他们可以在汇编级别分析生成的代码一个C++编译器。如何学习C++代码和生成的汇编代码之间的链接?

有什么方法可以用来学习C++代码和生成的程序集之间的链接,并达到这种熟练程度?

+3

1.学习程序集,2.学习一些编译原理,3.检查大量的编译器输出(尝试位操作算法)。 –

+4

分析它是什么?为什么这样的代码需要多线程?为什么它必须是实时的?对我来说听起来不像财务 - 财务关键字(即我试图避免的那些:)通常是'SQL,Oracle,存储过程,触发器'。 –

+2

您当然可以让您的编译器生成汇编作为您可以检查的输出,但是如果您不知道汇编,那么该输出将几乎没有意义。你必须学会​​汇编,这超出了一个Q&A论坛的范围,比如stackoverflow。 –

回答

1

首先要做的是学习汇编程序和机器代码。 英特尔网站上有关于机器码的一些非常好的文档( )(尽管它可能比您需要的更详细)。 是广泛使用的两种常见汇编程序格式: 使用的格式是Microsoft基于原始英特尔汇编程序,其中g ++使用 完全不同的东西(基于原始的Unix汇编程序 PDP-11),因此,必须选择一个(尽管汇编语法本身很少是真正的问题—知道个别的指令所做的更重要)。

一旦你有一个如何阅读汇编一些想法: 有选项输出汇编大多数编译器:用于VC++,使用/Fa(和/c为好, 如果你不想实际上链接的结果);关于g ++,-S(其 使编译器停止一旦它已经产生的汇编程序。在 情况下VC++的,汇编器将是在一个文件中xxx.asm(其中xxx.cpp 是文件的名称被编译),关于g ++ ,xxx.s尝试 编译一些代码,不同级别的优化,然后 看看在编辑器中装配

最后,如果问题是问,这可能是因为面试官 关心的性能问题。;他真正感兴趣的是 不管你是否知道各种操作的相对成本(或者风险 涉及多线程时;例如什么操作是原子等)在 哪种情况下,它可能不会伤害指出像 位置(它决定了缓存命中百分比)往往更重要的是个别操作。

4

对此的简单回答是,编译代码并在调试器中查看它。

调试器会以非常苛刻的方式向您显示两者之间的连接。下一步是理解编译器理论,然后查看编译器的源代码以了解他们尝试做什么。

我认为面试你的人可能一直在试图了解你是否能理解所涉及的是什么样的努力 - 而不是真正知道如何去做。

+0

我希望我可以接受这两个答案,你的描述非常简洁明了,但我接受了另一个,因为它对我的需求更为详细 – BlueTrin