我的问题是 在任何编程语言中,动态内存分配比静态内存分配更快吗?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
答案 0 :(得分:4)
是动态内存分配比静态内存分配更快
您要比较的是在堆栈上分配(自动)与在堆上分配(动态),此处不涉及静态分配。
在C ++中快速分配堆栈,一旦输入函数,就会分配自动变量的空间。只需从堆栈指针中减去所需空间的大小即可。
堆分配通常比在堆栈上分配慢。它涉及从操作系统中划分出大块内存,然后将这些块分解成更小的块以满足用户的分配请求。堆管理器可以是非常复杂的库,请参阅memory management。
答案 1 :(得分:2)
这不是静态分配,而是自动分配(您的变量是本地人)。静态分配用于static
本地和全局(文件范围)变量。
尽管如此,动态分配永远不会更快。在C和C ++中,系统调用很慢。
即使它不是那么慢,自动和静态分配瞬时。静态分配在程序启动时发生,并且只是操作系统为您的进程保留的更多空间。自动分配只是在调用函数时进一步向几个字节移动的堆栈指针。在任何一种情况下,除了你没有分配你的变量之外,没有其他的(以CPU为单位)。