c++程序的内存模型,new操作符详解

目录

内存四区

程序运行前

代码区

全局区

程序运行后

栈区

堆区

new操作符 

创建一个数 

创建一个数组


内存四区

不同区域存放不同的数据,赋予不同的生命周期,让我们更加灵活的编程

程序运行前

程序运行前就有代码区和全局区

代码区

程序编译后会生成exe可执行程序

代码区存放的是cpu执行的机器指令,二进制01

有两个特点

共享性:

对于频繁执行的代码,程序中只需要有一份

只读性:

不可以被修改,防止程序意外

全局区

存放全局变量与静态变量,常量

可以在编译器内尝试输出它们的地址,全局区的地址会挨在一起,而非全局区的变量又会存在另一块地址处

程序运行后

栈区

栈区内存由编译器自动分配释放 

不要返回局部变量的地址,因为局部变量存在栈区,当函数执行完后,栈区的内存会被自动释放

编译器会为我们做一次保留,第二次就不会保留了,而是给我们一段乱码

堆区

由程序员进行分配和释放,如果程序员没释放,程序结束时也会由操作系统回收

使用new关键字,可以将数据开辟到堆区

int *p = new int(10)

示例:开辟内存并且将内存的地址给指针p ,那个地址处存的值为10

指针p还是在栈空间里面,保存的是地址

new操作符 

创建一个数 
#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int *p = new int(10);
	cout << *p << endl;
	delete p;
	cout << *p;
	return 0;
}

 

第二次会输出乱码

创建一个数组
#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int * arr = new int[10];
	//在堆区创立一个含10个元素的数组,arr为该数组的首地址
	for(int i = 0; i < 10; i++){
		arr[i] = i;
	}
	for(int i = 0; i < 10; i++) cout << arr[i] << endl;
	return 0;
}

 

delete[] arr;
	//释放堆区数组

 

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值