所以到目前为止我所编程的只是C ++,我常常看到人们提到C ++快速的原因是因为它与机器代码非常相似。我想知道机器/ C ++代码架构到底是什么,为什么类似它会使它更快,以及它与其他架构如C#的比较。
我理解RAII,堆,堆栈和语法,但这是关于它的。我甚至不太了解计算机是由CPU,RAM和硬盘驱动器组成的。我计划很快开始为WP7应用程序开发学习C#,所以我更深入地了解了幕后发生的事情,这有助于我找出语言之间的差异/相似之处。
关于这个主题的文章的图表或指针会很棒!
答案 0 :(得分:4)
使C ++,C ++的东西不与任何机器架构非常相似。这是C子集的相似之处。变量赋值,函数调用,循环,数组遍历和比较都倾向于映射到一小组快速核心指令。对基元或数组元素的赋值通常是现代处理器上的单个指令:将值从存储器移动到寄存器的指令,反之亦然(例如)。长期用C编程的人可以直接看到他们的编译器将生成的机器代码。关键是“所见即所得” - 语言指令直接转换为机器代码,或多或少一对一。
另一方面,像C#(或Java,Ruby,Python,Perl,Haskell,Scheme等)这样的“更高级”语言具有或多或少的实质底层运行时支持系统。对于某些语言,这意味着作业可能需要先在表格中查找内容;对于其他人来说,这可能意味着有时候分配是简单的复制,或者其他时候是复杂的数据操作,这取决于它是什么类型的数据。预测如何将语句翻译成机器代码要困难得多。
C ++处于一个有趣的中间地带:一些任务就像C分配一样;其他的实际上是对operator=()
的重载调用,你从来都不确定你会得到什么(当然没有仔细研究。)C ++确实有一个运行时系统;它比Ruby或Haskell或Scheme的重量轻很多。
答案 1 :(得分:1)
这不是以任何方式“相似”。这是关于靠近硬件。 C和C ++都不会隐藏任何内存管理的细节。因为你必须考虑诸如对齐,连续访问和堆栈之类的低级事物,所以你可以编写更有效的代码。高级语言会将这些内容隐藏起来,这样可以获得更好的编程体验,但通常情况下代码的优化程度也不尽如人意。
答案 2 :(得分:0)
编程语言的发展表明,编程越方便,您需要为此付出更多的性能折衷。对于大多数编程初学者来说,Java对它们来说肯定比c或c ++更友好(内存管理,头文件,容器等)。 C或C ++比Java快,因为它们被编译成机器代码,可以直接加载和运行。但是对于java,你可能知道JRE,它是java代码的运行时框架,因为Java代码被编译成一些只能由Java虚拟机理解的代码(由c编写,带有一个小程序集)。对C#的.Net框架与JRE相似。 这种性能差异在某些以性能为导向的业务中可能起到很大作用,但对于大多数应用程序来说,这几乎不可见。 希望解释一下!