C++学习--动态分配内存,及栈区,堆区,全局区,常量区,程序代码区介绍

#include <iostream>
int main(){
	/*
		1.使用new动态分配内存:
			(1)指针真正的用武之地就是,在运行阶段让系统给指针分配一个没有被分配的内存空间,以便使用指针进行动态的存值.
			(2)但在这种情况下,就只能通过指针来访问内存了.
			(3)需要注意的是,使用指针及new分配的内存,需要在使用完之后,进行内存的释放.
			eg:
				//在运行阶段为一个int类型的值分配未命名的内存空间
				int *p = new int;
				//给该指针指向的空间进行赋值
				*p = 90;
				//释放给该指针指向空间分配的内存.
				delete p;
			(4)注意:不要创建两个指向统一内存地址的指针,因为这有可能在释放空间时,误删两次.
			eg:
				int * p1 = new int;
				int * p2 = p1;
				delete p1;
				//导致同一块内存空间被释放了两次.
				delete p2;
		2.使用new创建动态分配的数组:
			(1)
				//这里要注意,你在使用new时,intArray还不能说是数组,而应该是一个指向一段连续内存空间的指针.且new运算符返回的是第一个元素的地址.
				int * intArray = new int[10];
			(2)	使用delete[]释放指针数组的内存
				eg: delete [] intArray;
			(3)注意了,delete只能释放用new的指针指向空间,对于普通的指针,是无法使用delete释放所指向空间的,不然会出问题的.
		
		3.栈区:
			(1)由编译器自动分配释放,一般存放函数的参数值,局部变量的值等
			(2)操作方式类似数据结构中的栈-先进后出.
		4.堆区:
			(1)一般由程序员分配释放,如程序员使用new向系统申请分配的内存空间就是在堆区,且该空间的释放也是程序员通过delete进行.若程序不释放,程序结束时可能有操作系统自动回收
			(2)注意:与数据结构中的堆是两回事,这里的堆分配内存空间,类似与链表.前一个空间和下一个空间之间是建立了一种逻辑上的连接,而非物理上的连续的几个内存空间.
		5.全局区(静态区):
			(1)全局变量和静态变量时存储在一起的,即都存储在全局区里
			(2)全局区分配的内存空间,会在程序结束后,由系统进行统一的释放.
		6.文字常量区:
			(1)常量就放在这里,例如字符串常量,数字常量等,只要是常量那就是存放在文字常量区中.
			(2)文字常量区的内存空间,也是在程序结束后由系统统一释放.
		7.程序代码区:
			(1)存放函数体的二进制代码.
		eg:
			//num1被存放在栈区
			int num1;
			//str[]被存放在栈区,"旺财"被存放在文字常量区
			char str[] = "旺财";
			//p1被存放在栈区
			char * p1;
			//"翠花"和"\0"被存放在文字常量区,p2被存放在栈区
			char * p2 = "翠花";
			//全局(静态)变量num2被存放在全局区,"1024"被存放在文字常量区
			static int num2 = "1024";
			//分配的内存在堆区,p1在栈区,new int[10]在堆区
			p1 = new int[10];
			p2 = new char[20];
	*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值