C++内存管理

C和C++的内存模式有一定的区别,先分别整理总结(大部分摘自C++ primer 300+)

C++内存根据存储方面提供多种选择,如根据保留在内存中的时间长度(存储持续性),或者根据访问数据的权限等(作用域和链接)

另外new也可以动态分贝内存,定位new运算符提供了这种技术的一种变种(后半句什么意思||在选定的空间分配内存)

C++的名称空间也是一种控制访问权的方式


1.存储持续性

(1)自动存储类型:

生命周期为所在函数或者代码块。C++有2中存储持续性为自动的变量

(2)静态存储类型:

生命周期为整个程序运行过程。C++有3中存储持续性为静态的变量

(3)线程存储类型:

生命周期同所属的线程,用thread_local关键字声明

(4)动态存储类型:

用new 运算符分配内存一直存在,直到程序结束或者delete运算符将其释放。这种内存的存储持续性为动态,有事被称为自由存储或者堆(heap)

2.作用域

描述名称在文件(翻译单元)的多大范围内可见,一般分局部和文件

3.链接性

描述名称在不同单元间的共享的方式

自动变量无连接性

静态存储类型有三种连接性:

无:只能在当前函数或者代码块中访问

内部:只能在当前文件访问

外部:可以在其它文件中访问


5中变量的存储方式

存储描述 持续性 作用域 连接性 声明方式

自动 自动 代码块 在代码块中

寄存器 自动 代码块 在代码块中,使用关键字register

静态(无链接性) 静态代码块在代码块中,试用关键字static

静态(外部链接性) 静态 文件外部不在任何函数中

静态(内部链接性) 静态 文件内部不在任何函数中,试用关键字static


当链接性为外部,当其他文件中要使用时,需要使用extern关键字来声明。


使用C++运算符new(或者C函数 malloc())分配的内存被称为动态内存,动态内存由new和delete控制,而不是由作用域和链接性规则控制。

因此可以在一个函数中分配动态内存,在另外一个函数中进行释放。

与自动内存不同,动态内存不是LIFO(Last In First Out?),其分配和释放顺序取决于new和delete在何时以何种方式被使用。


通常,编译器使用三块独立内存

1.用于静态变量(可以再细分)

2.用于自动变量

3.用于动态存储


虽然存储方案概念不适用于动态内存,但适用于用来跟踪动态内存的自动和静态指针变量。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值