问题标签 [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.
.net - 词典的表现vs 泛型类型属性
编辑:我基于一个错误的假设提出了这个问题——我正在做的泛型类型实例查找将与在运行时创建的泛型类型上完成的工作相同。编译器可以访问我的工具中的那些,因此它可以将它们编译为地址查找。我仍然对 .MakeGenericType 在幕后所做的事情很感兴趣。
我刚刚在从 IDictionary 获取值和从具有静态属性的泛型类型获取值之间进行了快速比较。
100000000 次查找的结果:
字典:14.5246952 通用类型:00.2513280
.NET 在后台使用什么样的魔法来如此快速地映射到 Generic 的实例?我原以为必须使用类似于哈希表的东西来查找。也许它会被 JITTED... 我不知道!你?
这是我的测试工具 - 我确信它充满了错误,所以让我知道需要修复什么!
go - 在golang中旋转切片的有效方法
我需要一个函数来有效地反转 golang 中的切片。(我的具体需要是反转 []byte 的前缀)。
我检查了Effective Go中的示例,objdump -Sd
并生成了很多样板来检查数组索引。甚至交换也太低效了。
java - Java - 在 for 循环中声明变量
在循环内声明变量是不好的做法吗?在我看来,这样做,如下面的第一个代码块所示,将使用十倍于第二个代码块的内存......由于在循环的每次迭代中创建一个新字符串。这个对吗?
对比
javascript - Is not having local functions a micro optimisation?
Would moving the inner function outside of this one so that its not created everytime the function is called be a micro-optimisation?
In this particular case the doMoreStuff
function is only used inside doStuff
. Should I worry about having local functions like these?
An actaul example would be say :
loops - for循环或while循环哪个更快?
可能重复:
什么循环更快,while 或 for
我们可以将 for 循环和 while 循环用于相同的目的,这样更快
例如:我想循环一个项目 1000000000 次我应该使用 for 循环还是 while 循环?
这是迭代,那么为什么我们在编程中需要两者都只需要一个呢?
既然两个循环都工作相同,那么为什么我们需要两个?
c++ - C ++固定大小数组与相同类型的多个对象
我想知道(除了明显的语法差异之外)在包含一个对象的多个实例(相同类型)的类或该类型的固定大小的对象数组之间是否会有任何效率差异。
在代码中:
实际上,我会使用 boost::arrays,它是 C 样式数组的更好的 C++ 替代品。
我主要关心的是构造/销毁和读/写这样的双精度,因为这些类的构造通常只是为了调用它们的成员函数之一。
感谢您的帮助/建议。
java - Java中的私有内部类是否存在性能开销?
当我有带有私有方法或字段的内部类时,编译器必须创建合成的包保护访问器方法,以允许外部类访问这些私有元素(反之亦然)。
为避免这种情况,我通常将所有字段、方法和构造函数设为包保护而不是私有。
但是类本身的可见性如何呢?是否有开销
相对
请注意,在这两种情况下,构造函数都是受包保护的,还是将类设为私有会改变这一点?
c - 在相同偏移量的两个整数中快速搜索一些半字节(C,微优化)
我的任务是检查(> 万亿次检查),两个 int 是否包含任何预定义的半字节对(第一对 0x2 0x7;第二对 0xd 0x8)。例如:
所以,对于这个例子,我用需要的对标记两个偏移量(偏移量是 2 和 5;但不是 7)。我的任务中不需要实际的偏移量和找到的对数。
因此,对于给定的两个整数,问题是:它们是否包含相同偏移量的这些半字节对中的任何一个。
我检查了我的程序,这部分是最热的地方(gprof
已证明);它被称为非常非常多次(gcov
已证明)。实际上它是嵌套循环的第三或第四个循环(最嵌套)。
我当前的代码很慢(我将其重写为函数,但它是来自内部循环的代码):
另一个任务是不仅在偏移量 0,4,8 等处找到这对,而且在偏移量 0,2,4,8,10,... 位处找到这对:
是否可以并行重写此函数和宏?
我的编译器是 gcc452,cpu 是 32 位模式 (x86) 的 Intel Core2 Solo。
c - 遍历所有字典顺序的连续数字
对于给定first
长度的位向量bitnum
(<32),我需要遍历所有相同长度的字典顺序连续位向量。
例如,如果first
是 011001(二进制)并且bitnum
是 6,那么所有连续的都是:011011、011101、011111、111001、111011、111101、111111。另外,我也需要迭代 011001。
我的意思是字典顺序:
- 如果 in 的第 i 位
first
是 '1',那么 的第 i 位next
必须是 '1' - 如果第 i 位
first
是 '0',那么第 i 位next
可以是 '0' 或 '1'
生成此类位向量的最快方法是什么?
现在我使用这个未优化的代码,它通过生成所有可能的位向量来工作,并检查每个向量是否遵循first
字典中给定的方式。
我认为,如果代码只生成连续的位向量,它会更快。
First
向量是具有该位长度的任何可能的向量。
生成向量的顺序可以不同。
如果你想对这个函数或你的版本进行基准测试,有一个小的基准测试器,只需添加一个循环.. 函数代码:
例如,对于 bitnum=16,此代码在我的 PC 上运行 6 秒。我需要使用具有更高位数的此功能,最多 31。
请帮我优化loop_over_all_lex_succ
。
c - C 编译器可以/是否优化内联函数中的地址?
假设我有以下代码:
将重复的代码抽象为一个单独的函数,我们得到
我希望编译器能够内联change_locals
函数,并将*(&foo)++
生成的代码中的内容优化为foo++
.
如果我没记错的话,获取局部变量的地址通常会阻止一些优化(例如,它不能存储在寄存器中),但是当没有对地址进行指针运算并且它没有从函数中转义时,这是否适用?使用更大的change_locals
,如果它被声明inline
(__inline
在 MSVC 中)会有所不同吗?
我对 GCC 和 MSVC 编译器的行为特别感兴趣。