动态分配与静态分配的区别
difference between dynamic allocation static allocation
我的问题是在任何编程语言中,动态内存分配是否比静态内存分配快?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
动态内存分配比静态内存分配快吗
比较的是在堆栈上分配(自动)与在堆上分配(动态),这里不涉及静态分配。
在C++中,堆栈上的分配速度很快,一旦函数被输入,自动变量的空间就被分配了。这只是从堆栈指针中减去所需空间大小的问题。
堆分配通常比在堆栈上分配慢。它包括从操作系统中分割出内存块,然后将这些内存块分解成更小的部分,以满足用户的分配请求。堆管理器可能是相当复杂的库,请参阅内存管理。
这不是静态分配,而是自动分配(您的变量是本地变量)。静态分配用于static
本地和全局(文件范围)变量。
尽管如此,动态分配是从未更快。在C和C++中,这是一个系统调用,速度很慢。
即使没有那么慢,自动和静态分配也是即时的。静态分配发生在程序启动时,只是操作系统为进程保留了更多空间。当函数被调用时,自动分配只是堆栈指针向前移动几个字节。在任何一种情况下,都不会比没有分配变量做更多的事情(CPU方面)。
相关文章:
- 动态分配的数组和静态数组之间的区别
- make_pair和大括号 { } 之间的区别,用于在C++中分配一对?
- C++指针中的这两种类型的值分配有什么区别?
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- 分配指针的方法之间有什么区别?
- 在C++容器中,作为模板参数提供的分配器和作为构造函数参数提供的分配程序之间的区别
- 两种C++分配方法有什么区别
- 对于数据成员,如果包含对象已在动态内存中,则动态分配此变量(或不动态分配)之间是否有任何区别
- 分配同一类时上层类和继承类之间的区别
- 返回新对象的函数与将函数的结果分配给调用它的对象的 C++ 区别
- 当分配函数指针时,这两种符号之间有什么区别
- C ++中的几种分配内存方法有什么区别
- 分配指针和使用strcpy之间的区别
- 在struct和main中分配内存的区别
- 动态分配与静态分配的区别
- 指针和分配了内存的指针有什么区别
- c++中这个数组的静态分配和动态分配有什么区别
- 理解C++中双指针和单指针内存分配之间的区别的问题