我正在学习嵌入式 C 编程教程,然后意识到使用指针指向变量,然后使用它来取消引用可以使程序更快!
我有汇编的基本知识,但我不明白为什么将变量的地址分配给指针会更快,我们不是在谈论按引用或按指针或按值传递!
据我所知,
R0,就像带有指针的代码中发生的情况一样。p_int寄存器的别名R0,这如何帮助使程序更快?不使用指针的代码:
int counter = 0;
int main() {
while (counter < 6) {
++(counter);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
相反,下面是带有指针的代码:
int counter = 0;
int main() {
int *p;
p = &counter;
while (*p < 6) {
++(*p);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我联系了课程创建者,他很友善地为我重播并分解了它,为了帮助其他可能遇到同样问题的人,我将留下问题和答案
为了访问内存中的变量,CPU 需要该变量在寄存器之一中的地址。在最低级别的代码优化中,编译器在每次访问变量之前从代码存储器加载该地址。指针加快了速度,因为作为 main() 函数内的局部变量被分配到寄存器。这意味着该地址位于寄存器中(在本例中为 R0),不需要每次都加载并重新加载到寄存器中。在更高级别的优化下,编译器会生成更合理的代码,并且不带指针的代码与带指针的代码一样快。--彩信