C ++:我使用的是[],我正在使用的内存是什么?

时间:2015-06-22 12:23:35

标签: c++

#include <iostream>
#include <cstdlib>

using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
    int a[4]; 
}

我正在进行静态分配,对吧?那么,哪里找到了?堆叠还是堆?

3 个答案:

答案 0 :(得分:0)

在函数范围内直接声明的C / C ++中的任何对象都在堆栈上分配。 从new运算符创建的对象或由C的malloc等函数分配的对象在堆上分配。

在内部,堆栈分配的C ++对象可能对堆分配的数据负责,但对象本身仍然在堆栈上。

在你的例子中,数组是一个内置类型,在编译时已知有一个常量大小,没有提到new运算符......绝对完全在堆栈上!

答案 1 :(得分:0)

它的堆栈分配。程序员只能使用malloc,calloc,realloca或new,new []之类的运算符在堆上创建对象。因为您创建了四个整数的数组而没有指定任何动态内存管理例程。

答案 2 :(得分:0)

也许首先我们需要清除条款。范围内的公共变量定义称为“自动”。例如,您的变量定义是自动的。如果您希望变量定义是静态的,则必须使用关键字“static”。

至于内存:自动变量位于堆栈中。分配的空间,例如通过malloc或new,位于堆上。静态变量位于所谓的“数据段”上。有关详细信息,请查看此处:http://www.geeksforgeeks.org/memory-layout-of-c-program/