小编Ahm*_*abi的帖子

为什么使用指针(低优化)会使程序更快?

我正在学习嵌入式 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),不需要每次都加载并重新加载到寄存器中。在更高级别的优化下,编译器会生成更合理的代码,并且不带指针的代码与带指针的代码一样快。--彩信

c embedded assembly arm iar

0
推荐指数
1
解决办法
1653
查看次数

标签 统计

arm ×1

assembly ×1

c ×1

embedded ×1

iar ×1