动态分配与静态分配的区别

difference between dynamic allocation static allocation

本文关键字:区别 分配 静态 动态分配      更新时间:2023-10-16

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

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

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

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

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

堆分配通常比在堆栈上分配慢。它包括从操作系统中分割出内存块,然后将这些内存块分解成更小的部分,以满足用户的分配请求。堆管理器可能是相当复杂的库,请参阅内存管理。

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

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

即使没有那么慢,自动和静态分配也是即时的。静态分配发生在程序启动时,只是操作系统为进程保留了更多空间。当函数被调用时,自动分配只是堆栈指针向前移动几个字节。在任何一种情况下,都不会比没有分配变量做更多的事情(CPU方面)。