C++ 虚函数和可执行文件

标签 c++

有几个关于vptr和exe的问题:

1) vTable 何时创建并填充,即编译时或运行时?

2) 编译器是否将 vptr 放入 exe 中,即 exe 的大小随 no 的增加而增加。具有虚函数的类

3)当我们运行它并且它包含虚拟函数时,可执行文件的大小是否会增加

最佳答案

这都是定义的实现,并且会因编译器的不同而有所不同,该标准没有提到应该如何实现动态分派(dispatch),甚至没有使用 vtable 和 vpointer 这两个词,但是所有已知的编译器都通过 vtable 实现动态分派(dispatch)并假设您的问题的答案是:

vTable 何时创建并填充,即编译时或运行时?
编译时间
在编译阶段为每个类创建至少一个虚拟方法的 vtable。

编译器是否将 vptr 放入 exe 中,即 exe 的大小随 no 的增加而增加。具有虚函数的类?
是的,很有可能
由于vtable必须驻留在内存中的某个地方,它肯定会占用一些内存空间。

当我们运行它并且它包含虚拟函数时,可执行文件的大小是否会增加?
不,exe 的运行时不会增长。
只有函数的分派(dispatch)发生在运行时,使分派(dispatch)发生的机制是在编译时构造的。

关于C++ 虚函数和可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111335/

相关文章:

c++ - 在 C++ 中切换类实现的使用

c++ - 我如何使用 tm 结构将分钟添加到当前时间?

c++ - CMake项目结构: How do I properly merge libraries together and include them in multiple executables

c++ 是否需要在用户定义和特定于类的删除运算符中处理 nullptr。?

c++ - 在 C++ 中输入超时

c++ - 边界噪声去除实现

c++ - 寻找一个 C++ 库来自动更新应用程序

c++ - 如何在 C++ 中创建高效的二维网格?

c++ - 无法使用 qss 文件设置样式表属性

android - "module “QtQuick” 未安装”(安卓移植)