c++ - 英特尔 C++ 编译器将对象中的 vptr(指向虚函数表的指针)存储在哪里?

标签 c++ intel icc

英特尔 C++ 编译器将对象中的 vptr(指向虚函数表的指针)存储在哪里?

我相信 MSVC 将其放在对象的开头,而 gcc 放在末尾。 icpc(英特尔 C++ 编译器)有什么用?

最佳答案

你可以随时查看这个和派生类中的第一个地址所在的位置:

#include <stdio.h>

class foo
{
public:
    virtual int do_foo()=0;
};

class bar : public foo
{
public:
    int bar;
    int do_foo() {printf ("%08x %08x\n", this, &bar);}
};

int main()
{
    bar a_bar;
    a_bar.do_foo();
}

在我的 linux 机器上,结果是:

bfdbef3c bfdbef40

...这正是您所期望的:第一个指针加上虚函数指针的大小就是第二个指针的位置。

关于c++ - 英特尔 C++ 编译器将对象中的 vptr(指向虚函数表的指针)存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706861/

相关文章:

x86 - MSROM 程序中的条件跳转指令?

opencl - AMD CPU 与 Intel CPU openCL

c++ - AntTweakBar 不注册 SFML 鼠标事件

c++ - 我可以在默认初始化和值初始化之间或数组的全部或部分之间进行选择吗?

assembly - 为什么 INVLPG 至少被调用一次

c++ - 在 GCC、Clang 和英特尔编译器中强制内联单个宏?

assembly - 为什么执行的 AVX 指令数量会随着处理器系列的不同而变化

c++ - VS 10 中英特尔 C++ 编译器的矢量化报告目录

c++ - 当 c++ xx 获得批准时,命名空间 tr1 会发生什么变化?

c++ - 将 XML 流转换为十六进制