问题标签 [micro-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
10995 浏览

c - 为什么不能将寄存器变量设为全局?

从站点读取时,您无法创建寄存器类型的全局变量。为什么会这样?来源: http: //publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp ?topic=/com.ibm.xlcpp8l.doc/language/ref/regdef.htm

0 投票
7 回答
5340 浏览

c - 二分搜索算法的每次迭代是否可以只进行一次比较?

在二分查找算法中,我们有两个比较:

有没有一种方法可以让我只有一个比较而不是上述两个。

--

谢谢

阿洛克.Kr.

0 投票
5 回答
1687 浏览

scala - 使用惰性 val 缓存字符串表示

我在 JAXMag 的 Scala 特刊中遇到了以下代码:

上面代码中的使用是否lazy val比下面的代码提供了更多的性能?

还是只是不必要的优化?

0 投票
5 回答
743 浏览

c++ - 是否值得用 C 而不是 C++ 编写部分代码作为微优化?

我想知道现代编译器及其优化是否仍然值得用 C 而不是 C++ 编写一些关键代码以使其更快。

我知道如果类被复制而可以通过引用传递,或者当类由编译器自动创建时,通常使用重载运算符和许多其他类似情况,C++ 可能会导致性能下降;但是对于一个知道如何避免这一切的优秀 C++ 开发人员来说,是否仍然值得用 C 编写代码来提高性能?

0 投票
6 回答
24349 浏览

performance - MIPS(好奇心)清除寄存器的更快方法?

在 MIPS 汇编中清除寄存器(=0)的最快方法是什么?

一些例子:

哪个效率最高?

0 投票
4 回答
15835 浏览

c# - 为什么 DateTime.Now DateTime.UtcNow 如此缓慢/昂贵

我意识到这对微优化领域来说太过分了,但我很好奇为什么对 DateTime.Now 和 DateTime.UtcNow 的调用如此“昂贵”。我有一个示例程序,它运行几个场景来做一些“工作”(添加到计数器)并尝试这样做 1 秒钟。我有几种方法可以让它在有限的时间内完成这项工作。这些示例显示 DateTime.Now 和 DateTime.UtcNow 比 Environment.TickCount 慢得多,但与仅让单独的线程休眠 1 秒然后设置一个值以指示工作线程停止相比,这还是很慢。

所以我的问题是:

  • 我知道 UtcNow 更快,因为它没有时区信息,为什么它仍然比 TickCount 慢很多?
  • 为什么读取布尔值比读取 int 快?
  • 处理这些类型的场景的理想方法是什么,您需要允许某些东西在有限的时间内运行,但您不想浪费更多的时间来检查时间而不是实际工作?

请原谅示例的冗长:

0 投票
4 回答
4956 浏览

java - 可以优化数组访问吗?

也许我被我的分析器(Netbeans)误导了,但我看到了一些奇怪的行为,希望这里有人可以帮助我理解它。

我正在开发一个应用程序,它大量使用了相当大的哈希表(键是长整数,值是对象)。内置 java 哈希表(特别是 HashMap)的性能非常差,在尝试了一些替代方案之后——Trove、Fastutils、Colt、Carrot——我开始自己工作。

该代码使用双散列策略非常基本。这很好用,并且显示了迄今为止我尝试过的所有其他选项的最佳性能。

根据分析器的说法,问题在于,查找哈希表是整个应用程序中最昂贵的方法——尽管其他方法被调用更多次和/或执行更多逻辑。

真正让我困惑的是查找只由一个类调用;调用方法进行查找并处理结果。两者的调用次数几乎相同,调用查找的方法中有很多逻辑来处理查找的结果,但速度大约快 100 倍。

下面是哈希查找的代码。它基本上只是对数组的两次访问(根据分析,计算哈希码的函数实际上是免费的)。我不明白这段代码怎么会这么慢,因为它只是数组访问,而且我看不到任何让它更快的方法。

请注意,代码仅返回与键匹配的存储桶,调用者应处理该存储桶。'size' 是 hash.length/2,hash1 在哈希表的前半部分进行查找,hash2 在后半部分进行查找。key_index 是传递给构造函数的哈希表上的最终 int 字段,而 Entry 对象上的 values 数组是一个小的 long 数组,通常长度为 10 或更短。

非常感谢人们对此的任何想法。

谢谢。

编辑 hash1 & hash2 的代码

0 投票
7 回答
78010 浏览

c++ - 浮点除法与浮点乘法

通过编码是否有任何(非微优化)性能增益

相比

几年前,我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因。

这种说法是否适用于现代 PC 架构?

更新1

关于评论,请同时考虑这种情况:

更新 2 引用评论:

[我想]知道什么是算法/架构要求导致 > 除法在硬件上比乘法复杂得多

0 投票
5 回答
508 浏览

c++ - 将 unsigned char 8 位转换为实际数字的最快方法

我正在使用unsigned char存储 8 个标志。每个标志代表一个立方体的角。因此00000001,角 101000100将是角 3 和 7 等。我目前的解决方案是对&1、2、4、8、16、32、64 和 128 的结果,检查结果是否不为零并存储角。即,if (result & 1) corners.push_back(1);。我有没有机会摆脱那个'if'语句?我希望我可以用按位运算符摆脱它,但我想不出任何东西。

关于我为什么要摆脱 if 语句的一些背景知识。这个立方体实际上是一个体素,它是大小至少为 512x512x512 的网格的一部分。那是超过 1.34 亿个体素。我正在对每个体素进行计算(嗯,不完全是,但我不会详细介绍,因为它在这里无关紧要),这是很多计算。我需要每帧执行这些计算。每个函数调用的任何速度提升都将有助于这些计算量。为了给你一个想法,我的算法(在某些时候)需要确定浮点数是负数、正数还是零(在一些错误内)。我在那里有 if 语句,并且大于/小于检查。我用一个快速的 float to int 函数替换了它,并缩短了四分之一秒。目前,128x128x128 网格中的每一帧需要 4 秒多一点。

0 投票
3 回答
380 浏览

php - PHP微优化

如何发现无用的微优化技术?

应该避免什么?