【问题标题】:C++ From the Compiler's Point of View [duplicate]从编译器的角度来看 C++ [重复]
【发布时间】:2012-01-31 12:36:44
【问题描述】:

可能重复:
What are the stages of compilation of a C++ program?

我发现了解给定软件语言的编译方式是了解最佳实践和充分利用该语言的关键。对于 C++,这似乎是双重事实。是否有从编译器的角度描述 C++ 的好的入门或文档(对于凡人)? (显然每个编译器都有点不同。)

我认为在 Stroustrup 的书的开头可能有类似的内容。

【问题讨论】:

  • 并不是我在阻止您对编译器如何工作的好奇心,而是我认为您对“最佳实践”有错误的想法。最佳实践并不是要了解编译器的内部结构。它是关于可维护性、可靠性和生产力的编程。 C++ 的最佳实践适用于所有编译器,并且经常溢出到其他编程语言。
  • @EmileCormier - 我同意;但是/例如,我发现在某些/许多情况下,如果人们查看给定的最佳实践并询问“为什么”,最终会达到规范或编译器的一个方面,该方面规定了人们想要鼓励或减轻的某种行为.
  • @LuchianGrigore - 谢谢你的链接。它肯定回答了部分问题。我正在寻找更具描述性的东西。
  • @Colin:我的书架上有 Meyers 和 Sutter 编写的每一本 C++“最佳实践”书籍,但我没有一次将编译器实现细节视为特定指南的基本原理。您说您发现许多情况下编译器的实现解释了最佳实践。愿意举个例子吗? :)
  • @Colin:别等了,我可能错了。 :-) 通过引用传递大对象将是最佳实践的一个示例,这是由于编译器的内部行为所致。另一种方法是避免过深和过宽的递归,这种递归可能会消耗所有堆栈内存,其中堆栈内存是编译器实现的细节。

标签: c++


【解决方案1】:

我个人喜欢这个。不完全是编译器的视角,但它告诉你 C++ 程序的“幕后”发生了什么。

Inside the C++ Object Model

【讨论】:

  • 谢谢,这可能正是我想要的。
【解决方案2】:

这取决于你想要获得什么。我发现Itaium ABI 是了解 C++ 对象模型的一些复杂性的好文档。它不会处理优化等问题,但我发现了解如何实现虚拟继承之类的东西,或者像构造函数和析构函数看起来更简单的东西(你知道编译器可能生成多达 3您提供的每个构造函数的版本?2 个析构函数?)

免责声明:该文档非常密集,您可能需要多次浏览这些部分,至少我这样做过。而且您需要很好地理解语言的语义才能真正掌握解决方案为何如此复杂。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      我不知道任何这样的书,但是如果您想了解编译器如何处理 C++,最简单的方法是编写一些代码并让编译器吐出带注释的程序集列表并检查它.这将使您了解特定编译器如何处理代码。

      你也可以参与一个编译器项目,比如 llvm 的 clang 项目?

      【讨论】:

        猜你喜欢
        • 2016-01-01
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 2018-02-18
        • 2010-11-15
        相关资源
        最近更新 更多