黑马程序员——C++中的内存模型

今天睡了懒觉,下午四点才开始学习。今天开始学C++核心知识点,主要学习两块——内存分区、C++中的引用,这一节讲的是内存模型:
内存是有分区的,所以我们要知道哪些变量在哪些分区,如果搞混了分区,在函数调用、参数返回值的时候就一定会出现错误。
内存分区:代码区、全局区、栈区、堆区。
编写代码,编译成功,生成exe文件,在exe文件执行前,会有代码区、全局区。

代码区:
可以重复多次操作,只读不可修改

全局区:
放全局变量、静态变量(static)、常量(字符串常量、全局常量(const修饰的全局变量))。在程序结束后,由操作系统释放内存
以上可以知道,局部变量和局部常量不在全局区!!!

栈区:
由编译器开辟,放形参和局部变量。一定不要返回局部变量的地址(第一次对,后面程序释放,就会报错)

int *func() {//在栈上开辟内存
	int a = 10;//加上static,变成静态变量就可以了
	return &a;
}

有一个方法可以返回地址,将局部变量改为静态变量,加static变成静态变量。

堆区:
由程序员分配释放,一般用new定义。注意:new创建的变量返回的是地址,所以需要用同类型的指针:int *p=new int(10)就是创建了一个堆,存入数据为10,用*p可以访问该堆,对于分堆,不想用的时候,用:delete p;释放该分区。
new创建堆数组:int *p=new int[10],释放的时候有点不一样:delete [] p;加了这个,告诉程序,删除的是数组。

好的,下一节引用。这是一个完美的东东,就像指针常量,可以改参数值,不可以改指向。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值