作者:可爱竹子16 | 来源:互联网 | 2023-09-25 20:11
这篇文章主要介绍了C++内存分区模型的使用(代码区、全局区、栈区、堆区、new),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着
目录
- 内存分区模型
- 1 代码区
- 2 全局区
- 3 栈区
- 4 堆区
- 5 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 <
总结
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 <
4 堆区
#include
using namespace std;
int *func()
{
//利用new关键字,将数据开辟到堆区
//指针本质也是局部变量,存放在栈上,指针保存的数据存放咋堆区
int* p = new int(10);
return p;
}
int main()
{
//在堆区开辟数据
int* q = func();
cout <<*q <
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 <
#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 <
注意:
- 释放堆取数组
- 释放数组的时候,要加[]才可以,否则认为是只是放一个元素
参考:
哔哩哔哩 黑马程序员