c++内存四区之堆区 如何将数据放在堆区

由程序员分配释放的内存单元,若程序员不释放,则在程序关闭时由操作系统回收.

如何将数据放在堆区

在C++中由new关键字在堆区中开辟内存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


using namespace std;

int* (){

int *a_p= new int(10);

return a_p;
}

int main(){
int *p = func();

cout<<*p<<endl;

return 0;
}

输出结果为:

1
10

看到上述代码的创建局部指针变量,但数据存放在栈区是什么意思呢?

其实在a_p这个指针变量,仍然是一个局部变量,只不过它在由new在堆区开辟的内存中存放的,请看下图。

堆区

也就是说*a_p只不过是指向的堆区中的数据,但是这个指针变量还是存放在栈区的。函数的最终返回值时堆区的10的地址。