C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

这篇文章主要介绍了C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

内存分区模型

在这里插入图片描述

1 代码区

在这里插入图片描述

在这里插入图片描述

2 全局区

// 全局变量、静态变量、常量

在这里插入图片描述

 #include  using namespace std; // 全局变量、静态变量、常量 //全局变量 int g_a=10; int g_b=10; //const修饰的全局常量 const int c_g_a = 10; const int c_g_b = 10; int main() { //创建普通局部变量 int a = 10; int b = 10; cout << "局部变量a的地址为:" << (int)&a << endl;//&a取地址,(int)强制转换为10进制 cout << "局部变量b的地址为:" << (int)&b <

在这里插入图片描述

在这里插入图片描述

总结

在这里插入图片描述

3 栈区

在这里插入图片描述

栈区注意事项

  • 不要返回局部变量的地址
  • 栈区的数据由编译器管理开辟和释放
 #include  using namespace std; //栈区注意事项 //不要返回局部变量的地址 //栈区的数据由编译器管理开辟和释放 int *func(int b)//形参数据也存放在栈区 { b = 100; int a = 10;//局部变量:存放在栈区,栈区的数据在函数执行完毕自动释放 return &a;//返回局部变量的地址 } int main() { //接受func函数的返回值 int *p=func(1); cout << *p << endl;//第一次可以打印正确的数字,因为编译做了一次保留 cout << *p << endl;//第二次,就没了,输出乱码 system("pause"); return 0; } 

在这里插入图片描述

4 堆区

在这里插入图片描述

在这里插入图片描述

 #include  using namespace std; int *func() { //利用new关键字,将数据开辟到堆区 //指针本质也是局部变量,存放在栈上,指针保存的数据存放咋堆区 int* p = new int(10); return p; } int main() { //在堆区开辟数据 int* q = func(); cout << *q << endl;//与上一个程序对比,多输出几次 cout << *q << endl; cout << *q << endl; cout << *q << endl; system("pause"); return 0; } 

在这里插入图片描述

5 new运算符

在这里插入图片描述

 #include  using namespace std; //1.new的基本语法 int* func() { //在堆区创建整形数据 //new返回的是数据类型指针 int* p = new int(10); return p; } //2.在堆区利用new 开辟数组 int main() { //在堆区开辟数据 int* q = func(); cout << *q << endl;//与上一个程序对比,多输出几次 cout << *q << endl; cout << *q << endl; //堆区数据是由程序员管理开辟、管理释放 //如果想释放堆区数据,利用关键字delete delete q; cout << *q << endl;//内存已被释放,再次访问就是非法操作,报错 system("pause"); return 0; } 

在这里插入图片描述

在这里插入图片描述

 #include  using namespace std; //1.new的基本语法 //2.在堆区利用new 开辟数组 void test() { //创建10整形数据的数组,在堆区 int *arr =new int[10];//10代表数组有10个元素 for (int i = 0; i <10; i++) { arr[i] = i + 100;//给10个元素赋值,100~109 } for (int i = 0; i <10; i++) cout << arr[i] << endl; //释放堆取数组 //释放数组的时候,要加[]才可以,否则认为是只是放一个元素 delete[] arr; } int main() { test(); system("pause"); return 0; } 

在这里插入图片描述

注意:

  • 释放堆取数组
  • 释放数组的时候,要加[]才可以,否则认为是只是放一个元素

参考:

哔哩哔哩 黑马程序员

以上就是C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言