当应用于基本类型时,通过引用进行 const 调用是否会提高性能?

2024-03-29

对于对象(尤其是字符串),按引用调用比按值调用更快,因为函数调用不需要创建原始对象的副本。使用const,还可以确保引用不被滥用。

我的问题是,如果使用基本类型(如 bool、int 或 double),const 按引用调用是否也会更快。

void doSomething(const string & strInput, unsigned int iMode);
void doSomething(const string & strInput, const unsigned int & iMode);

我的怀疑是,一旦基本类型的字节大小超过地址值的大小,就使用引用调用是有利的。即使差异很小,我也想利用这一优势,因为我经常调用其​​中一些函数。

附加问题:内联对我的问题的答案有影响吗?


我的怀疑是,一旦基本类型的字节大小超过地址值的大小,就使用引用调用是有利的。即使差异很小,我也想利用这一优势,因为我经常调用其​​中一些函数。

在 C++ 中,基于预感的性能调整大约有效率为 0%(这是我对统计数据的直觉,它通常有效......)

正确的是const T&将小于T if sizeof(T) > sizeof(ptr),所以通常是 32 位或 64 位,具体取决于系统。

现在问问自己:

1) 有多少内置类型大于 64 位?

2) 复制 32 位是否值得让代码变得不太清晰?如果您的函数因为没有向其复制 32 位值而变得明显更快,那么也许它没有做太多事情?

3)你真的那么聪明吗? (剧透警告:不。)请参阅这个很好的答案,因为它几乎总是一个坏主意:https://stackoverflow.com/a/4705871/1098041 https://stackoverflow.com/a/4705871/1098041

最终只是按值传递。如果在(彻底)分析之后您发现某些函数是瓶颈,并且您尝试的所有其他优化都不够(并且您应该在此之前尝试其中的大多数),请传递常量引用。

然后看看它不会改变任何东西。翻身哭泣。

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

当应用于基本类型时,通过引用进行 const 调用是否会提高性能? 的相关文章

  • 用 C 语言制作查找表的最佳方法是什么?

    我正在开发一个嵌入式 C 项目 我有一个 LCD 显示屏 每个字符都有一个 5x7 点阵 要显示特定字符 您必须移动与要打开的点相关的 5 个字节 所以我需要制作某种带有键的查找表 我可以在其中传递 ASCII 字符 并返回一个 5 字节的
  • 将 void* 作为函数调用而不声明函数指针

    我已经搜索过 但找不到任何结果 我的术语可能有问题 所以如果以前有人问过这个问题 请原谅我 我想知道是否有一种简单的方法可以调用void 作为 C 中的函数 无需首先声明函数指针 然后为函数指针分配地址 IE 假设要调用的函数是类型void
  • 访问二维数组的一行末尾之后的元素是否是 UB?

    以下程序的行为是否未定义 include
  • 是否可以将向量的一部分作为向量发送给函数? [复制]

    这个问题在这里已经有答案了 我想看看是否可以将向量的一部分传递给函数 以便它显示为函数的法线向量 更重要的是 我希望这可以在 O 1 的常数时间内完成 我不想迭代向量来创建一个新向量 事实上 我还希望在下面的示例中将新向量的大小更改为 40
  • 如何修改道路网络的 L 系统?

    向大家问好 我目前正在研究道路网络的程序生成 并偶然发现了 L 系统算法 根据我从有关该主题的各种科学论文以及有关该主题的论文的进一步论文中了解到 算法更改为使用 全局目标和局部约束 其中修改所采取的路径以适应地形等输入值和人口密度 现在我
  • 公开 ASP.NET 用户控件中的复杂属性

    我想从自定义 ASP NET 用户控件公开一个复杂的属性 可以通过aspx页面中的控制标签来设置 像这样的事情 public class TestData public int X public int Y public partial c
  • 从 C 调用带有字符串参数的 Go 函数?

    我可以从 C 调用一个没有参数的 Go 函数 按照下面的 https github com joeprivacy crefgo hello world 这通过编译go build和打印 Hello from Golang main func
  • 使用 Xlib 捕获鼠标

    我想编写一个简单的 Xlib 程序来改变鼠标行为 举个例子 反转垂直移动 我在捕获事件时遇到问题 我想要代码 捕获控制器位置的变化 我向上移动鼠标 MotionEvent 计算新的光标位置 new x difference x 设置新的光标
  • 测试 WebApi 控制器时如何生成 Asp.net 用户身份

    我正在使用 Web API 2 在 web api 控制器中我使用过GetUserId使用 Asp net Identity 生成用户 ID 的方法 我必须为该控制器编写 MS 单元测试 如何从测试项目访问用户 ID 我在下面附上了示例代码
  • 堆和栈数据访问性能对比

    众所周知的常识是 对于大多数算法来说 在堆栈上分配和释放数据比在堆上分配和释放数据要快得多 在C 中 代码的区别就像 double foo n n vs double foo new int n n 但是 当访问和计算位于堆或堆栈上的数据时
  • 如何在MVVM架构中将animationview play与LottieForms绑定?

    所以我在列表视图中处理动画 并且我想随时播放一次 所以我想控制它 这是图书馆https github com martijn00 LottieXamarin https github com martijn00 LottieXamarin
  • FormsAuthentication.SetAuthCookie() 是否需要重定向?

    检查用户的凭据并确认其良好后 我正在使用FormsAuthentication SetAuthCookie Username false 对用户进行身份验证 然后在母版页中我使用Page User Identity IsAuthentica
  • 不区分大小写“包含(字符串)”

    有没有办法让下面的返回为真 string title ASTRINGTOTEST title Contains string 似乎没有过载允许我设置区分大小写 目前我将它们都大写 但这很愚蠢 我指的是i18n http en wikiped
  • 可变长度数组性能影响 (C/C++)

    我正在编写一个相当简单的函数 它将数组发送到文件描述符 但是 为了发送数据 我需要附加一个一字节标头 这是我正在做的事情的简化版本 它似乎有效 void SendData uint8 t buffer size t length uint8
  • 如何使用最小起订量模拟 Controller.User

    我有几个 ActionMethods 查询 Controller User 的角色 如下所示 bool isAdmin User IsInRole admin 在这种情况下可以方便地行事 我开始使用这样的代码对这些方法进行测试 TestMe
  • C 错误:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“char (*)[100]”

    过去几天我正在用 c 进行练习 并且收到此警告 如标题所示 我已经尝试了很多东西 但我真的不知道如何准确地解决这个问题 我不擅长编程 所以会有错误 以下是我正在使用的结构 无法更改 因为它们就是这样给出的 typedef struct bo
  • 将引用托管代码中分配的内存的指针传递给非托管代码

    我在 C 中分配了一个大的 char 缓冲区 并且希望将指向此数据的指针传递给 DLL 中的未管理的 c 函数 现在我认为要使其工作 必须修复字符缓冲区 以便 GC 在函数工作时无法移动它 如果是这样 我会声明缓冲区已固定并调用 UNSAF
  • 正确重载 stringbuf 以替换 MATLAB mex 文件中的 cout

    MathWorks 目前不允许您使用cout当 MATLAB 桌面打开时 从 mex 文件中读取 因为它们已重定向 stdout 他们当前的解决方法是提供一个函数 mexPrintf 他们要求你改用 http www mathworks c
  • Azure:MissingRegistrationForLocation:未在位置“YYYY”中为资源类型“XXXX”注册订阅

    这最初是作为未找到订阅 https stackoverflow com questions 35071797 subscriptionnotfound the subscription resourcegroups could not be
  • 显式调用静态构造函数

    我想为下面的课程编写单元测试 如果名称不是 MyEntity 则 mgr 应为空 消极的单元测试 使用 Manager 私有访问器 我想将名称更改为 Test 以便 mgr 应该为空 然后会验证 mgr 值 为了实现这一点 我想显式调用静态

随机推荐

  • C# 中可以有同名的公共 getter 和私有 setter 吗?

    如何为属性创建公共 getter 和私有 setter 下面的说法正确吗 public String Password set this password value private String Password get return t
  • Mongoose findOne 通过 _id 嵌入文档

    我正在尝试将菜单推送到嵌入文档 但我在餐厅里没有定义 findOne 我只是想将一些文档推送到餐厅的菜单类别中 正如您在架构中看到的 var RestaurantSchema new mongoose Schema contactTelph
  • Python 服务器客户端 WinError 10057

    我正在使用 Python 3 3 制作服务器和客户端socket模块 我的服务器代码工作正常 但此客户端代码返回错误 这是代码 import socket import sys import os sock socket socket so
  • 如何覆盖 GIN 中的绑定

    我找到了 Guice 的答案重写 Guice 中的绑定 https stackoverflow com q 483087 929804但不知道如何在 GWT 中对 GIN 执行同样的操作 提前致谢 据我所知 不支持 回答您的评论 如果您运行
  • 在 json 中存储 pandas 数据帧时保持列和行顺序

    当使用 to json 将数据存储在 json 对象中并使用 read json 读回时 行和列将按字母顺序返回 有没有办法保持结果排序或在检索时重新排序 你可以使用orient split 它将索引和列信息存储在列表中 并保留顺序 In
  • 每个故事显示不同的开放图对象

    好吧 我不确定我在开放图谱中是否做错了什么 但就是这样 我的开放图谱中有 3 个故事 它们是链接到一种对象类型的三个不同操作 Make A Pledge To gt Cause Create gt Cause Log Expense For
  • 在没有 C++ 11 的情况下使用 char16_t、char32_t 等?

    我想要固定宽度类型 包括字符类型
  • 软键盘打开时调整布局

    我在某些应用程序中看到 当显示软键盘时布局会发生变化 这当然不是adjustPan因为整个布局 可能是内部布局 发生了变化 而不仅仅是当前的EditText 例如 这是在 Evernote 登录屏幕中 你能建议一下这是怎么做的吗 下面是一个
  • 如何获取 Webview iframe 链接来启动浏览器?

    我正在使用 WebView 来显示一个页面 其中 html 包含一个 iframe 其中 src xxxxx php 该 iframe 作为带有底层链接的广告图像加载 如果我单击该图像 链接 它会尝试在原始 iframe 中加载新页面 在那
  • 为什么建议将实例变量声明为私有?

    我的问题与Java有关 但它也可以应用于C 我想知道为什么每个人都建议创建实例变量private而不是制作它们受保护的 我们想一想 子类看不到私有变量 因此如果我需要访问或更改子类中超类的变量 我被迫使用一些访问器和修改器方法 例如getM
  • 将 Windows Phone 7 应用程序中的图像文件上传到 PHP

    我正在尝试从图片库 在 WP7 上 上传图片并将其保存在服务器上的文件夹中 在服务器上 我使用 PHP 通过 POST 方法接收文件 PHP 代码是
  • 在 fortran 中生成序列数组

    Fortran中是否有一个内在函数可以生成一个包含从a到b的数字序列的数组 类似于python的range gt gt gt range 1 5 1 2 3 4 gt gt gt range 6 10 6 7 8 9 不 没有 但是 您可以
  • 获取完整的正在运行的进程列表(Visual C++)

    我目前正在使用 EnumProcesses 函数来获取正在运行的进程的列表 然而 由于我的应用程序在用户空间中运行 因此它无法获取不在用户下运行的进程 包括系统进程 的句柄 是否有其他方法可以让我访问这些内容 我所需要的只是进程名称 只是为
  • Android:减少 GridView 中列之间的空间

    请参阅随附的屏幕截图 其中我试图减少 GridView 中列之间的空间 我的main xml如下
  • SQL 选择一行并存储在 SQL 变量中

    所以 我正在编写这个存储过程 但我对 SQL 真的很烂 我向你们提出的问题是 我可以选择整行并将其存储在变量中吗 我知道我可以做类似的事情 declare someInteger int select someInteger select
  • 日期时间格式和时区

    当尝试解析日期时DateTime createFromFormatPHP 将无法识别时区 Example t new DateTime echo t gt format Y m dTH i s 将输出 2012 01 24MSK16 53
  • Rails 控制台错误需要'./example_user'

    我正在使用 Railstutorialhttp ruby railstutorial org chapters rails flavored ruby sec a user class http ruby railstutorial org
  • sqlite get 字段超过 2 MB [重复]

    这个问题在这里已经有答案了 当我尝试从 SQlite 获取数据且字段大小超过 2 MB 时 它会抛出异常 Couldn t read row 0 col 0 from Cursor Window Make sure the Cursor i
  • .Net TPL:具有任务优先级的有限并发级别任务调度程序?

    我目前正在使用 LimitedConcurrencyLevelTask Scheduler 详细信息请参见此处http msdn microsoft com en us library ee789351 aspx http msdn mic
  • 当应用于基本类型时,通过引用进行 const 调用是否会提高性能?

    对于对象 尤其是字符串 按引用调用比按值调用更快 因为函数调用不需要创建原始对象的副本 使用const 还可以确保引用不被滥用 我的问题是 如果使用基本类型 如 bool int 或 double const 按引用调用是否也会更快 voi