根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫做自由存储空间或堆)。在存在是间的长短方面,以这三种方式分配的数据对象各不相同。下面简要介绍这三种类型(注:C++11中新增了第四种类型——线程存储)
1.自动存储
在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。例如,挡在一个自定义的函数getname()中定义了一个temp数组时,temp数组仅当getname()函数活动时存在。当成许控制权回到main()时,temp使用的内存将自动被释放。如果getname()返回temp的地址,则main()中的name指针指向的内存将很快得到重新使用。这就是在getname()中使用new的原因之一。
实际上,自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。
自动变量通常存储在栈中。这意味着执行代码块时,其中的变量将依次加入到栈中,而在离开代码块时,将按相反的顺序释放着些变量,着被称为后进先出(LIFO)。因此,在程序执行过程中,栈将不断地增大和缩小。
2.静态存储
静态存储是整个程序执行期间都存在的存储方式。是变量称为静态的方式有两种:一种是在函数外面定义它;另一种是在声明变量时使用关键字statis:
static double fee = 56.50;
3.动态存储
new和delete运算符提供了一种比自动变量和静态变量更灵活的方法。它们管理了一个内存池,这在C++中被称为自由存储空间(free store)或堆(heap)。该内存池同用于静态变量和自动变量的内存是分开的。new和delete让您能够在一个函数中分配内存,而在另一个函数中释放它。因此,数据的声明周期不完全收程序或函数的生命时间控制。与使用常规变量相比,使用new和delete让程序员对程序如何使用内存有更大的控制权。然而,内存管理也更复杂了。在栈中,自动添加和删除机制使得占用的内存总是连续的,单new和delete的相互影响可能导致占用的自由存储区不连续,这使得跟踪新分配内存的位置更困难。

最新文章

  1. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化
  2. WebApi官方系列
  3. Android 数字签名
  4. 在 Cloud 9 中搭建和运行 Go
  5. 快速学习JavaScript面向对象编程
  6. redis集群搭建
  7. ArcGIS Geodatabase版本控制机制的学习总结
  8. Centos搭建openvpn+mysql数据库认证
  9. mac打开.caj格式文件
  10. Http Statis 500 -错误笔记
  11. asp.net错误.在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错
  12. win8如何显示文件后缀名
  13. 关于开发微信小程序后端linux使用xampp配置https
  14. 5_XSS
  15. Netty序章之BIO NIO AIO演变
  16. CF559C Gerald and Giant Chess
  17. oracle命令1
  18. SQL 运算符
  19. 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
  20. Luogu P3957 跳房子

热门文章

  1. angularjs-1
  2. Java类载入器 ClassLoader的解析
  3. 关于 AngularJS 的数据绑定
  4. Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008
  5. iOS开发Swift篇—(七)函数
  6. dp之01背包hdu3466(带限制的,当你所拥有的钱数大于某个限定值时才可以购买该物品)
  7. hdu1978(记忆化搜索)
  8. CSS学习笔记(4)--选择器(w3school)
  9. Python操作Word:常用对象介绍
  10. Redis-stat is not found