【发布时间】:2015-05-08 23:30:48
【问题描述】:
如果我将迭代变量声明为类成员一次,我想我会节省一些时间:
struct Foo {
int i;
void method1() {
for(i=0; i<A; ++i) ...
}
void method2() {
for(i=0; i<B; ++i) ...
}
} foo;
不过,这似乎快了 20%
struct Foo {
void method1() {
for(int i=0; i<A; ++i) ...
}
void method2() {
for(int i=0; i<B; ++i) ...
}
} foo;
在这段代码中
void loop() { // Arduino loops
foo.method1();
foo.method2();
}
您能解释一下性能差异吗?
(我需要在 Arduino 上运行许多简单的并行“进程”,这样的微优化会产生影响。)
【问题讨论】:
-
“如果我将迭代变量声明为类成员一次,将节省一些时间”。一个很奇怪的想法,那个。每次都是
this->i。 -
我会冒昧地猜测本地计数器变量只存储在寄存器中,但要知道这些东西,请使用 @987654325 进行编译@ 并查看程序集。
A和B是否小于 256?然后编译器可能能够在本地情况下使用 8 位 int(在 8 位 MCU 上更快)。一切都是猜测。 -
这个想法不是分配额外的堆栈空间并在每次调用时保存一条指令。
...做了很多不同的事情,但i用作低于 256(字节大小)的数组索引。