-1

我的问题是在任何编程语言中动态内存分配都比静态内存分配快吗?

int main(int, char**)
{
    int *pa = new int; // faster than
    int a;             // ?
    return 0;
}
4

2 回答 2

4

动态内存分配比静态内存分配快吗

您要比较的是在堆栈上分配(自动)与在堆上分配(动态),这里不涉及静态分配。

在 C++ 中,栈上的分配速度很快,一旦进入函数,自动变量的空间就被分配了。只需从堆栈指针中减去所需空间的大小即可。

堆分配通常比在堆栈上分配要慢。它涉及从操作系统中切出大块内存,然后将这些块分解成更小的部分,以服务于用户的分配请求。堆管理器可以是非常复杂的库,请参阅内存管理

于 2014-08-29T09:39:07.260 回答
2

这不是静态分配,而是自动分配(您的变量是本地变量)。静态分配用于static局部和全局(文件范围)变量。

尽管如此,动态分配永远不会更快。在 C 和 C++ 中,这是一个系统调用,速度很慢。

即使它不是那么慢,自动和静态分配也是瞬时的。静态分配发生在程序启动时,只是操作系统为您的进程保留的更多空间。当你的函数被调用时,自动分配只是堆栈指针再往前走几个字节。在这两种情况下,没有比没有分配变量更多的(CPU 方面)。

于 2014-08-29T09:38:52.710 回答