动态分配静态分配的区别

时间:2014-08-29 09:32:59

标签: c++ dynamic-allocation static-allocation

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

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

2 个答案:

答案 0 :(得分:4)

  

是动态内存分配比静态内存分配更快

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

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

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

答案 1 :(得分:2)

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

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

即使它不是那么慢,自动和静态分配瞬时。静态分配在程序启动时发生,并且只是操作系统为您的进程保留的更多空间。自动分配只是在调用函数时进一步向几个字节移动的堆栈指针。在任何一种情况下,除了你没有分配你的变量之外,没有其他的(以CPU为单位)。