编译器在哪里存储C++类的方法?

Mas*_*gar 5 c++ compiler-construction optimization

这更像是一种好奇心......

假设我有一个C++类Kitty如下:

class Kitty
{
    void Meow()
    {
        //Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器是否将Meow()的代码放在Kitty的每个实例中?

显然,在任何地方重复相同的代码需要更多的内存.但另一方面,分支到附近内存中的相对位置需要更少的汇编指令,而不是分支到现代处理器的内存中的绝对位置,因此这可能更快.

我想这是一个实现细节,因此不同的编译器可能会有不同的表现.

请记住,我不是在考虑静态或虚拟方法.

Jul*_*ain 3

我相信实例方法的标准方法是像任何静态方法一样实现,仅一次,但将指针this传递到特定寄存器或堆栈上以执行调用。