可以更改自动分配内存的范围会影响性能吗?

Nat*_*idt 0 c c++ performance memory-management

我有一个程序涉及对少数函数的大量调用,每个函数在本地分配固定大小的数组(总共大约几百个字节).假设将所有分配移动到main然后传递指针会获得更好的速度是否正确?换句话说,从堆栈指针中减去线性或恒定时间,并且,如果它需要恒定时间,那么与将函数传递给函数相比,成本是多少?

我做了一个小速度测试.示例#1运行得快一点.

示例#1

using namespace std;
#include <iostream>
int f(int* a){

    // do stuff

    return 0;
}

int main(){

    int a[1000];

    int x;
    for (int i = 0; i < 50000; ++i){
        x=f(a);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

例#2

using namespace std;
#include <iostream>

int f(){

    int a[1000];

    // do stuff...

   return 0;
}

int main(){

    for (int i = 0; i < 50000; ++i){
        x=f();
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

mfr*_*fro 5

你似乎理解本地空间的分配是昂贵的,而事实上并非如此(它只是来自堆栈指针的减法).

考虑到你可能用指针反向引用"半全局"局部变量而造成的混乱main(),我看不出你提出的任何真正的价值,虽然它肯定有可能提出一个证明我错的特殊例子.

一般来说,尝试在编码的早期阶段进行优化是一个坏主意.特别是如果你交易简单,易于阅读/理解(可疑)效率.

尝试编写尽可能简单明了的代码.如果有必要,可以在后期进行优化,而不是在您明确发现瓶颈之前进行优化(这并不容易).