临时变量会减慢我的程序吗?

2023-12-01

假设我有以下 C 代码:

int i = 5;
int j = 10;
int result = i + j;

如果我循环这么多次,使用起来会更快吗int result = 5 + 10?我经常创建临时变量以使代码更具可读性,例如,如果这两个变量是使用某些长表达式来计算索引从某个数组中获取的。这在 C 语言中性能不佳吗?其他语言呢?


现代优化编译器应该优化这些变量,例如,如果我们在godbolt with gcc使用-std=c99 -O3 flags (现场观看):

#include <stdio.h>

void func()
{
  int i = 5;
  int j = 10;
  int result = i + j;

  printf( "%d\n", result ) ;
}

它将产生以下组件:

movl    $15, %esi

用于计算i + j,这是形式不断传播.

注意,我添加了printf这样我们就有副作用了,否则func会被优化为:

func:
  rep ret

这些优化是允许的假设规则,只需要编译器模拟程序的可观察行为。 C99 标准草案部分涵盖了这一点5.1.2.3 程序执行其中说:

在抽象机中,所有表达式都按以下指定的方式求值 语义。实际的实现不需要评估一部分 表达式,如果它可以推断出它的值没有被使用并且没有 产生所需的副作用(包括因调用 函数或访问易失性对象)。

另请参阅:优化 C++ 代码:常量折叠

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

临时变量会减慢我的程序吗? 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • Rx.NET 中是否有一个Subject 实现,其功能类似于BehaviourSubject,但仅在值发生更改时才发出?

    有没有Subject https learn microsoft com en us previous versions dotnet reactive extensions hh229699 v vs 103 Rx NET 中的实现在功能
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 时区和本地化

    目前 我将所有时间存储为 UTC 以便当我开始将多个站点和服务器联机时 事情会变得更容易 翻译的时候就出现了问题date and datetime对象在我的模板中以及接受用户输入时转换为字符串 对于采用太平洋标准时间 PST 的人来说 下午
  • bash 中数组的动态变量名称

    我有一个名为 循环 的数组 对于 循环 中的每个元素 我想创建一个数组 其名称包含当前元素的文本 然后我想循环遍历每个新数组并打印每个数组中的每个元素 这个帖子似乎对变量有一个很好的解决方案 但我不知道如何使其适用于数组 我的脚本 bin
  • objc_copyClassList:更新到 iOS 13.4 / XCode 11.4 后崩溃 EXC_BAD_INSTRUCTION

    更新到 iOS 13 4 XCode 11 4 后 这段代码 func getSubclassInfos gt ClassInfo let superObject CityModel self let superClassInfo Clas
  • 如何在 PHP 中使用 imap 从电子邮件中提取内联图像(不是附件)[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 当我在 php 中使用 imap 获取电子邮件时 我收到电子邮件正文内容 但我无法提取粘贴但未附加在电子邮件正文中的内联图像 在电子邮件内容正文中搜索图像 假设您的电子邮件正文是 body
  • WinForms 中的图层效果(模糊等)

    在WinForms中 我正在寻找一种方法来实现类似于Java Swing中的JXLayer类的功能 更具体 我想模糊窗口的整个内容 并在上面绘制一些东西 例如 等待圆圈 任何想法都将受到高度赞赏 这是我的解决方案 截图 Blur it 将模
  • bash tail 不带变量的文件夹中的最新文件

    我的文件夹中有一堆日志文件 当我 cd 进入该文件夹并查看文件时 它看起来像这样 ls lhat rw r r 1 root root 5 3K Sep 10 12 22 some log c48b72e8 log rw r r 1 roo
  • 从文件中读取而不锁定它

    每次收到请求时 我都会不断地向一个文件写入一些数据 有时我还想解析该文件并从中读取 如果文件不断被写入 我该如何读取 模式是什么 你可以利用sync RWMutex Then 当需要读取文件时 调用RLock 阅读 然后调用RUnlock
  • PHP:可以自动获取所有发布的数据吗?

    简单的问题 即使您不知道所有字段 是否可以将所有数据发布到页面 例如 我想编写一个简单的脚本来收集所有发布的数据并通过电子邮件发送 我可以预见表单中的字段可能会随着时间的推移而发生很大变化 因此从长远来看 为了节省自己一些时间 我想知道是否
  • 如何编译 Groovy 源代码而不是从文件系统

    我使用 GroovyClassLoader parseClass src 即时 编译单个 groovy 源模块 一切正常 但问题是当这个源模块导入其他类时 这些类还没有编译 当我开始编译一个源代码但其他源代码是必需的并且在源路径上准备就绪时
  • 在 Python 中使用 NLTK 时,generate() 会做什么?

    这三天我一直在和NLTK进行熟悉 并阅读 自然语言处理 一书来了解发生了什么 我很好奇是否有人能为我澄清以下问题 请注意 第一次运行此命令时 它会很慢 因为它 收集有关单词序列的统计数据 每次运行它时 您 将得到不同的输出文本 现在尝试在中
  • Pandas groupby.size vs series.value_counts vs collections.Counter 具有多个系列

    有很多疑问 1 2 3 处理 a 中的计数值单系列 然而 关于最佳计数方法的问题较少两个或多个系列的组合 提出了解决方案 1 2 但没有讨论何时以及为何应该使用每一种 以下是三种潜在方法的一些基准测试 我有两个具体问题 Why is gro
  • 如何在Java中更改图表比例

    我有一个图表 其中 x 轴显示时间 y 轴显示我的数据 我想通过为 x 轴选择不同的指标来更改比例 例如秒 分钟和小时刻度 默认是第二个 因此 如果我选择分钟 图表应该更小并且更弯曲 任何想法 UI 尚未完成 但您认为会有 x 轴和 y 轴
  • 在 C# 中保存来自 Web 请求的图像

    我正在使用 jQuery 网络摄像头插件与页面中的网络摄像头进行通信并拍摄快照 它的工作方式是通过与 Flash 助手进行通信 为了保存图片 它会获取另一个页面的名称并向该页面发送 Web 请求 我已成功收到对方的请求 我想保存该请求中的图
  • PyQt5 无法在 ChromeOS 上运行?

    我正在尝试在 chromeOS 上开发一些 pyqt 应用程序 然而 在安装过程中不断出现一些错误 我尝试了两种方法 首先使用 conda 后来直接安装软件包 用conda安装的时候没有出现错误 但是当我尝试运行时 出现了这个错误 qt q
  • Jquery Ui 选项卡中的 JWYSIWYG 或 jHtmlArea

    我无法让我的 jwysiwyg 和 Jhtmlarea 文本编辑器在 AJAX 加载的 Jquery UI 选项卡中工作 正常加载时 两个文本编辑器都可以工作 这将加载 查看页面 上的选项卡 这将通过 AJAX 在 查看页面 上加载页面 l
  • 过渡盖箱未撞击

    我正在从数据总线采样值 因为预期值是不连续的 因此容器没有达到转换覆盖范围 虽然垃圾箱在没有过渡的情况下独立运行 示例 我们想要涵盖地址 W 的值的转换 A W X W Z D 7 0 8 0 covergroup cg with func
  • Cloud Functions for Firebase 是否尊重实时数据库规则?

    我正在尝试在特定节点使用安全规则来保护我的实时数据库 我了解当我使用我的设备写入 读取时 Firebase 规则将适用 如果写入 读取恰好来自 Cloud Functions 怎么办 如果我保护 用户 节点 那么 Cloud Functio
  • 任意手指扫描iPhone sdk示例教程

    我在应用商店里看到很多关于指纹扫描的应用 我想获得一个教程 它是如何工作的 或者是否有免费 付费的 sdk 可用 背后的目标是使用指纹扫描作为登录 而不是每次都必须使用用户名 密码登录 非常感谢 这不可能 你无法通过iPhone屏幕获取用户
  • 使用 Apple 的 Accelerate 框架、FFT、Hann 窗和 Overlapping

    我正在尝试设置FFT对于一个项目 确实没有清楚地了解事情 基本上 我正在使用Audio Units从设备的麦克风获取数据 然后我想做FFT就该数据而言 到目前为止 这是我的理解 我需要为我的数据设置一个循环缓冲区 在每个填充的缓冲区上 我应
  • 临时变量会减慢我的程序吗?

    假设我有以下 C 代码 int i 5 int j 10 int result i j 如果我循环这么多次 使用起来会更快吗int result 5 10 我经常创建临时变量以使代码更具可读性 例如 如果这两个变量是使用某些长表达式来计算索