我的问题是在任何编程语言中,动态内存分配是否比静态内存分配快?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
动态内存分配比静态内存分配快吗
比较的是在堆栈上分配(自动)与在堆上分配(动态),这里不涉及静态分配。
在C++中,堆栈上的分配速度很快,一旦函数被输入,自动变量的空间就被分配了。这只是从堆栈指针中减去所需空间大小的问题。
堆分配通常比在堆栈上分配慢。它包括从操作系统中分割出内存块,然后将这些内存块分解成更小的部分,以满足用户的分配请求。堆管理器可能是相当复杂的库,请参阅内存管理。
这不是静态分配,而是自动分配(您的变量是本地变量)。静态分配用于static
本地和全局(文件范围)变量。
尽管如此,动态分配是从未更快。在C和C++中,这是一个系统调用,速度很慢。
即使没有那么慢,自动和静态分配也是即时的。静态分配发生在程序启动时,只是操作系统为进程保留了更多空间。当函数被调用时,自动分配只是堆栈指针向前移动几个字节。在任何一种情况下,都不会比没有分配变量做更多的事情(CPU方面)。