c++ - 编译器如何将类的对象实例翻译成二进制机器代码?

标签 c++ architecture compiler-construction computer-science

我正在考虑尝试研究和构建一个非常小的人为设计的编译器,用于一种语言的子集。我想这对我目前的技能水平来说太难了。

但是,有些事情让我很感兴趣,编译器如何将抽象概念(例如对象)翻译成汇编/二进制文件?

例如:

class Dog            
{
  public:            
    Dog(string name);
    ~Dog();
    string GetName();
};

dog *Dog = new Dog('rover');

那是如何被翻译成机器代码的——这真是令人费解。

最佳答案

幕后?这里没有什么大惊喜。让我们假设一个合理的编译器:

首先,有一个全局Dog* dog。在全局对象表中添加一个名称,大小为 4,类型为 (Dog) 的指针。 接下来,有一个非常量表达式的初始化。编写一小段代码 __dog__initializer 调用 ::operator new(sizeof(Dog)),将结果存储在 dog 中,然后调用 __Ctor_Dog。需要一个字符串常量 "rover",因此将其添加到全局字符串表中。

当读取整个文件时,所有表都被翻译成目标文件的各个部分,因此链接器可以将它们放在一起。这并不是真正生成二进制代码,只是将现有部分放在一起。

请记住,这只是一个假设的实现,细节在实践中肯定会有所不同。

关于c++ - 编译器如何将类的对象实例翻译成二进制机器代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006447/

相关文章:

c++ - 是否存在大小为N的c++标准库容器,该容器具有log(N)插入和搜索,但是具有N次迭代,而不是N * log(N)?

parsing - 是否有一个简单的小语言编译器

javascript - for 循环条件是否优化?

c++ - 警告 C4995 : 'CDaoDatabase' : name was marked as #pragma deprecated

C++ 从文件中读取矩阵类型输入

c++ - C++ 中的内置类型 bool 或 C 中的 stdbool.h 类型将 TRUE 和 FALSE 定义为不是机器字的大小?

.net - 通过依赖注入(inject)解决循环依赖

c++ - Qt 中的 O(1) 映射?

c++ - 缓存预取场景——power架构

java - 内存缓存架构