0

我被分配了一项基本解释这一点的任务。我快速浏览了编译器文档,它似乎是一个不错的起点,尽管它非常广泛而且我没有太多时间。我想知道我是否需要事先了解 C99 标准,或者我是否可以检查另一个好的来源。如果有任何不同,我将在 Windows 上使用它。我还理解简单的概念,例如堆、堆栈、链接等等。

4

4 回答 4

2

AFAIK,g++ 只是一个 C/C++ 编译器,仅此而已。内存根据标准 C/C++ 库进行管理。

于 2008-12-15T21:37:58.367 回答
1

任何体面的 C/C++ 教程都应该提供这些信息的基础知识——但是 C/C++ 中的内存管理是一个巨大的话题。当然,对于入门级课程,您的讲师会提供一些指导,并且可能会提供更具体,更不开放的问题。

于 2008-12-15T22:01:34.217 回答
0

这个问题我不是很清楚。如果通过“了解 mingw/g++ 中的内存管理”是指“了解 mingw g++ 编译器在编译文件时如何在内部处理内存,例如它何时分配和释放抽象语法树节点等”)那么你的答案是作为多遍编译器,GCC 可能不知道任何特定数据的最佳生命周期,但它确实知道从一个遍到另一遍不需要大量对象,因此它尽可能使用内存池和垃圾收集其他地方

另一方面,如果您询问“如何/何时/以什么顺序......对象、函数、变量等被放入堆栈......分配了什么以及何时以及如何影响性能”那么你'在一个漫长的夜晚浏览代码。

于 2008-12-16T00:19:28.307 回答
0

g++ 只是一个编译器。它遵循它编译的语言的规则(在 G++ 的情况下是 C++,但你也提到了 C99)。

对于您相当具体的问题,您可能需要

  • 查阅语言标准(对于 C++,这是 ISO/IEC 14882)。不幸的是不是免费的,但你可以在网上免费找到基本上和真品一样好的草稿。最新的官方版本是 C++2003 (ISO/IEC 14882-2003),但与原来的 '89 相比只包含非常小的变化。C++09 也接近完成,网上也有草稿可用。但是请注意,这是大量阅读,除非您已经非常熟悉该语言,否则我不建议您尝试在那里找到任何东西。
  • 分析编译器生成的汇编代码。该标准在实现方面留下了很多东西,因此找出 G++ 如何具体将事物推送到堆栈上的唯一方法是分析它生成的代码。(另请注意,这可能会在不同版本的 G++ 之间发生变化)

C++ 是一种众所周知的未指定语言。标准没有涵盖大量的块,编译器可以自由地做它喜欢的事情。这使得准确找出给定编译器在幕后所做的工作有点挑战。

出于这个原因,您还应该确保您确切地知道您应该做什么。挖掘有关该语言对内存管理的描述,或者g++如何专门处理它的信息?

于 2008-12-15T23:14:10.653 回答