c++ - 更改自动分配内存的范围是否会影响性能?

标签 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;
}

示例#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;
}

最佳答案

您似乎将本地空间的分配理解为昂贵,但实际上并非如此(它只是堆栈指针的减法)。

考虑到您可能会在 main() 中用指针向后引用“半全局”局部变量造成困惑,我看不出您的建议有任何实际值(value),尽管它是当然有可能想出一个特殊的例子来证明我错了。

一般来说,尝试在编码的早期阶段进行优化是个坏主意。特别是如果您以简单性和易于阅读/理解来换取(有问题的)效率。

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

关于c++ - 更改自动分配内存的范围是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714101/

相关文章:

c++ - Qt QList<T> 转换和 node_copy

c - 使用 C 从 .raw 文件恢复 JPEG 图像

Python,将整数写入 '.txt'文件

performance - 使用 FFMPEG 提取缩略图在大型视频文件上 super 慢?

python - python 会为代理提供足够的性能吗?

c++ - 如何为 Windows 安装 libjpeg?

C++ Builder 是 StrToFloat() 与 .ToDouble() 相同

c++ - 遍历所有链表的高效算法(C++)

c - C 编程中未定义的函数引用

将用户输入与 C 中的字符串进行比较