cpp关于内存四区的笔记

1.关于几个区域的划分

代码区:存放二进制文件(程序运行前就创建)

全局区:存放全局变量,静态变量和常量(运行前)

栈区;里面存入方法,使用方法的时候是弹出栈操作,里面放入局部变量,数组之类的(运行中)

堆区:里面存入的是手动new出来的(运行中)

(注意,生命周期和作用域不要混淆)

2.关于代码区;

代码区是在程序运行前就存在的,里面的文件允许共享(既是内存中只有一份,反复执行也只是这一段代码),还有只读性(防止在执行过程中被修改)

3.关于全局区域

经过验证可知,这些东西的地址确实是挨着的

-------------------------------------------------------------------------------

 全局区域中存在的东西为

const修饰的全局变量(全局常量)                   静态变量

字符串常量(例如"hahaha"直接括起来)          全局变量

----------------------------------------------------------------------------------

而不存在的东西为

const修饰的部分变量(部分常量)

部分变量

全局区域总结

1.常量分为三种(全局常量,字符串常量,局部常量),不全是在全局中

const int a=12;
#define pi 3.1415926//两种常量
int main(){
cout<<"hahahah";//字符串常量
const int a=12;//局部常量
}

2.只要是局部,就一定不在全局区里面

3.全局区的生命周期从程序开始到结束

三.关于栈区

1.栈区中存在的应该是;局部变量 , 局部常量 , 形参数据

2.栈的生命周期应该是到方法结束为止,里面的内存全部释放掉.

but这里遇到了一点问题

形成原因为;

(解释有理有据--------------)

总之尽量不要返回局部变量的地址,太混乱了,返回数值就i行了

4.关于堆区域;

1.是程序员手动用new语句创建的,但是这个生命周期和java不一样,java底层利用虚拟机干掉了用完的new(程序结束).这个的生命周期有一点长.........需要手动delete

关于new的使用....

new int(12);//这里会自动创建一个地址开辟空间
	//而且返回值也是地址,所以要用指针接收
	int* p = new int(10);//没有变量名字,直接出指针了
	//记得手动删除!
	delete(p);

//关于new关键字;
//1.返回值是一个地址,必须用指针接收,相当于java的底层
//2.一定要记得删除delete name;
int* modify() {
	int * arr = new int[10];
	//3.由于数组的第一个地址也是数字,所以用对应数据类型作为指向也可以
	for (int i = 1; i <= 10; i++) {
		arr[i-1] = i;
	}
	return arr;
}
int main() {
	int* point = modify();
	for (int i = 1; i <= 10; i++) {
		cout << *point << endl;
		point++;
	}
	//4.使用完这里记得要delete一下子;
	delete[] point;//4.指明这是一个数组,一次要删除一大串而不仅仅是这里
	return 0;
}

详见一些内容和应用

 3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_术鸦的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值