#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];
}
我正在进行静态分配,对吧?那么,哪里找到了?堆叠还是堆?
答案 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/