关于虚函数的成本

2023-11-27

如果我在循环中调用虚拟函数 1000 次,我会承受 1000 次还是仅一次的 vtable 查找开销?


编译器也许能够优化它 - 例如,以下内容(至少在概念上)很容易优化:

Foo * f = new Foo;
for ( int i = 0; i < 1000; i++ ) {
   f->func();
}

然而,其他情况则更加困难:

vector <Foo *> v;
// populate v with 1000 Foo (not derived) objects
for ( int i = 0; i < v.size(); i++ ) {
   v[i]->func();
}

同样的概念优化也适用,但编译器很难看到。

底线 - 如果您真的关心它,请在启用所有优化的情况下编译代码并检查编译器的汇编器输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于虚函数的成本 的相关文章

  • 结构体如何存储在内存中?

    我有一个struct iof header在我的代码中 我确定它的宽度是 24 字节 我执行 sizeof iof header 它返回 32 字节宽 问题1为什么是 32 字节宽而不是 24 字节宽 问题2包括其成员在内 结构体如何存储在
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 警告 C4800:“int”:强制值为 bool“true”或“false”(性能警告)

    我的代码中有这个问题 bool CBase isNumber return id MID NUMBER bool CBase isVar return id MID VARIABLE bool CBase isSymbol return i
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 如何创建自定义 EL 函数来调用静态方法?

    我是 JSF 2 的新手 我的问题与 BalusC 对此问题的回答有关jsf2 ajax根据请求参数更新部分我尝试了 BalusC 发布的 kickstart 代码 遇到了 EL 解析错误 nameofpage xhtml 12 64 re
  • Java 文件:序言中不允许出现内容

    我是 Spring 新手 开始使用 Sprint Tool Suite eclipse 并在我的 Maven 项目的 java 文件中看到此错误 Prolog 中不允许内容 这会阻止该类 这只是一个最小的 SpringBootApplica
  • 布局兼容类型的目的是什么?

    标准defines当两种类型是布局兼容 但是 我在标准中没有看到当两种类型同时存在时会产生什么后果布局兼容 看起来布局兼容是一个没有在任何地方使用的定义 目的是什么布局兼容 注意 据说 这可能意味着类型具有相同的布局 offsetof对于每
  • 声明区域和范围有什么区别

    关于声明区域 每个名称都在程序文本的某个部分中引入 称为 声明区域 这是程序中最大的部分 该名称有效 关于范围 一般来说 每个特定名称仅在某些可能的范围内有效 程序文本的不连续部分称为其范围 它们之间有什么区别 声明区域是可以声明名称的地方
  • 在 64 位计算机上访问硬件 PKCS11 令牌

    这就是我正在尝试做的事情 我有一个带有一些证书的硬件令牌 我正在编写一个 Java 应用程序来尝试访问这些证书 我在 Windows 32 位机器上使用了 jre6 中的 SunPKCS11 库 这是我如何访问证书的一个小示例 String
  • 如何在 Firefox 3 中从 HTML 输入表单获取文件路径

    我们有简单的 HTML 表单
  • ASP.NET 4.5 TryUpdateModel 不使用母版页在 WebForm 中选取表单值

    我正在使用 WebForms 并且尝试在母版页内执行模型验证 由于某种原因 模型没有获取值 这意味着如果我输入一个好的值 则在验证触发后 模型会一直返回空 因此一遍又一遍地触发验证 如果我将代码放在没有母版页的页面中 它就可以正常工作 我举
  • 从 javascript 在浏览器 (Chrome) 中播放声音

    我正在写一个 html 页面 我希望它在运行时按照某些 JavaScript 的指定发出声音 在 html 中 按照我在这里阅读的答案中的建议 我有以下行 这会在加载时播放声音 因此我确信我已经给出了有效 wav 文件的有效路径 一旦一切正
  • gcc 的 __attribute__((packed)) / #pragma pack 不安全吗?

    在 C 中 编译器将按照声明的顺序布置结构体的成员 并在成员之间或最后一个成员之后插入可能的填充字节 以确保每个成员正确对齐 gcc 提供了语言扩展 attribute packed 它告诉编译器不要插入填充 从而允许结构成员不对齐 例如
  • 在 MATLAB 中标准化矩阵的快速技术

    我想在 Matlab 中标准化矩阵的每一列 我尝试了两种实现 选项A mx max x mn min x mmd mx mn for i 1 size x 1 xn i x i mn mmd 0 mmd mmd 0 2 2 1 end 选项
  • 如何从 Tensorflow.js (.json) 模型转换为 Tensorflow (SavedModel) 或 Tensorflow Lite (.tflite) 模型?

    I have 下载的来自 Google 的 Tensorflow js tfjs 的预训练 PoseNet 模型 因此它是json file 但是 我想在Android上使用它 所以我需要 tflite模型 尽管有人将类似的模型从 tfjs
  • scanf /字段长度:使用变量/宏,C/C++

    使用 scanf 时如何使用变量来指定字段长度 例如 char word 20 1 scanf file 20s word 另外 使用 20 1 是否正确 因为它需要在末尾添加 0 相反 我想要这样的东西 define MAX STRING
  • WebRTC java 服务器问题

    我想我已经非常接近让我的 Java 服务器应用程序通过 WebRTC 与浏览器页面对话 但我还不能完全让它工作 我觉得我遗漏了一些小东西 所以我希望这里有人可以提出建议 我仔细研究了 WebRTC 示例 Java 单元测试 org webr
  • 如何从 tslint 中排除文件夹?

    我喜欢排除test在 vscode 中使用 tslint 进行文件夹表单 linting 所以我在 tslint json 配置文件中放置了一个排除项 不幸的是 排除语句不起作用 有谁知道如何设置排除吗 exclude tests ts r
  • 使用 Javascript 读取文本文件

    以下代码应在加载时读取当前目录中的文本文件的内容 并将其显示在 html 页面上 我尝试自行修改 但它没有给出输出 有没有更简单的方法可以使用其他方法获得此结果 或者请帮忙找出这段代码有什么问题
  • 如何在 Swift 中使用 XIB 文件初始化/实例化自定义 UIView 类

    我有一堂课叫MyClass这是一个子类UIView 我想用一个初始化XIB文件 我不确定如何使用名为的 xib 文件初始化此类View xib class MyClass UIView what should I do here init
  • 服务层的 Spring AOP

    我需要一些有关 Spring AOP 的帮助 我有以下代码 Service public class UserSecurityService implements UserDetailsService Autowired private U
  • 为什么有些资源有名称和“名称”属性?

    我是 Terraform 的新手 正在尝试在 Azure 上创建一些资源 对我来说 资源名称和属性之间似乎存在一些不必要的重复name在定义中 resource azurerm resource group group name name
  • 如何将 ${CHANGES} 传递给下游作业?

    我有上游工作轮询 SVN 进行更改 如果检测到更改 则开始构建 构建完成后 上游项目调用下游项目运行测试 我正在使用 触发参数化构建 我希望下游项目能够发送一封电子邮件 其中包含测试结果以及导致构建 测试的 SVN 更改 但问题是 如果我在
  • 关于虚函数的成本

    如果我在循环中调用虚拟函数 1000 次 我会承受 1000 次还是仅一次的 vtable 查找开销 编译器也许能够优化它 例如 以下内容 至少在概念上 很容易优化 Foo f new Foo for int i 0 i lt 1000 i