c++体系结构:它与机器体系结构有什么相似之处?
C++ architecture : how is it similar to machine architecture
所以到目前为止我用的都是c++编程,我经常看到人们提到c++快的原因是因为它与机器码非常相似。我想知道机器/c++代码架构到底是什么,为什么相似会使它更快,以及它与其他架构(如c#)相比如何。
我理解RAII,堆,堆栈和语法,但这是关于它。除了CPU、RAM和硬盘之外,我对计算机是由什么组成的都不太了解。我打算很快开始学习c#,以便很快开发WP7应用程序,所以我认为对底层发生的事情有更深入的了解将有助于我识别语言之间的异同。
关于这个主题的图表或文章的指针将是伟大的!
使c++, c++的东西,是而不是真正类似于任何机器架构。C子集也很相似。变量赋值、函数调用、循环、数组遍历和比较都倾向于映射到一小组快速的核心指令。在现代处理器上,对原语或数组元素的赋值通常是一条指令:例如,一条指令将值从内存移到寄存器,反之亦然。用C编程很长时间的人可以从字面上看到编译器将生成的机器码。关键是"所见即所得"——语言指令直接翻译成机器代码,或多或少是一对一的。
另一方面,像c#(或Java、Ruby、Python、Perl、Haskell、Scheme等)这样的"高级"语言有或多或少实质性的底层运行时支持系统。对于某些语言,这意味着赋值可能需要先在表中查找一些东西;对于其他人来说,这可能意味着赋值有时是简单的复制,有时是复杂的数据操作,这取决于它是什么类型的数据。很难预测你的语句将如何被翻译成机器代码。
c++处于一个有趣的中间地带:一些赋值就像C的赋值;其他的实际上是对operator=()
的重载调用,你永远不确定你会得到什么(当然,没有仔细研究)。c++确实有运行时系统;它只是比Ruby、Haskell或Scheme的轻量级得多。
这不是关于在任何方面"相似"。这是为了贴近硬件。C和c++都不会向您隐藏内存管理的任何细节。因为您必须考虑诸如对齐、连续访问和堆栈之类的低级事情,所以您可以编写更高效的代码。高级语言对您隐藏了这些东西,这使得编程体验更好,但通常情况下,代码并没有得到应有的优化。
编程语言的发展表明,编程越方便,需要为此付出的性能代价就越大。对于大多数编程初学者来说,Java肯定比c或c++更友好。(内存管理,头文件,容器等)。C或c++比Java快,因为它们被编译成机器代码,可以直接加载和运行。但是对于java,您可能知道JRE,它是java代码的运行时框架,因为java代码被编译成只有java虚拟机才能理解的代码(它是用c编写的,带有一点汇编)。. net框架之于c#就像JRE之于Java。在某些以性能为导向的业务中,这种性能差异可能是一个大问题,但对于大多数应用程序来说,这几乎是不可见的。希望这能解释清楚!
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 以编程方式在运行时检测 CPU 体系结构
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 了解类型特征的体系结构
- Apple Mach-O-Linker 错误:在体系结构 x86-64 中找不到从(行)引用的变量
- c++体系结构:它与机器体系结构有什么相似之处?