这比什么都更让人好奇......
假设我有一个 C++ 类 Kitty,如下所示:
class Kitty
{
void Meow()
{
//Do stuff
}
}
编译器是否将 Meow() 的代码放在 Kitty 的每个实例中?
显然,到处重复相同的代码需要更多的内存。但另一方面,在现代处理器上,分支到附近内存中的相对位置需要的汇编指令比分支到内存中的绝对位置更少,因此这可能更快。
我想这是一个实现细节,所以不同的编译器可能会有不同的表现。
请记住,我在这里不考虑静态或虚拟方法。
最佳答案
在通常的实现中,任何给定函数只有一个拷贝。给定对象实例的代码和数据之间的关联是通过传递隐藏参数(在函数中称为 this
)建立的,该参数是指向对象实例(及其数据)的指针。
对于虚函数,事情变得有点复杂:每个类都有一个 vtable,其中包含一组指向虚函数的指针,每个对象都有一个指向其类的 vtable 的指针。通过查找 vtable 指针、查看正确的偏移量并调用该指针指向的函数来调用虚函数。
关于c++ - 编译器在哪里存储 C++ 类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907797/