C++ 动态内存

这篇博文,记录一下自己学习的关于C++动态内存的内容。

什么是动态内存?

  当我学习一件东西的时候,一般最先想知道的是,这是什么东西。为了理解动态内存,我们先要知道C++内存相关的知识。

  C/C++程序所占用的内存除了文字常量区(存放常量字符串)和程序代码区(存放函数体的二进制代码),主要是三个部分:

  • 栈内存(stack)   由编译器自动分配释放,存放定义在函数内的非static对象。
  • 静态内存  由编译器自动分配释放,保存局部static对象,类static数据成员以及定义在任何函数之外的变量。  
  • 堆内存,自由空间(heap) 保存动态分配的对象,必须显式的创建和销毁。(注:堆和自由空间并不全部对等,详情可以参考https://cloud.tencent.com/developer/article/1155154)  

  知道这些内容后,我们就知道了动态内存,就是由程序员从堆中根据需要申请的一块内存。随之而来的问题就是:为什么需要动态内存。

为什么需要动态内存?

  我在《c++primer》上找到了答案,程序使用动态内存一般出于以下三个原因之一:

  • 程序不知道自己需要使用多少对象
  • 程序不知道所需对象的准确类型
  • 程序需要在多个对象间共享数据(共享相同的状态)

  对于第一种原因,很好的例子就是容器类。c++中原始数组,必须在声明的时候就给出数组的大小,很不灵活,动态数组就是实现随时添加元素并且不会造成资源的浪费。对于第三个原因,因为动态内存是由程序员分配释放,不会被编译器销毁,所以可以通过指向动态内存的指针在对象共享数据。

如何使用动态内存?

  动态内存的使用,也就是new和delete的使用,这里就不详细介绍,但最重要的就是要记住几点

  • 不要多次delete同一块内存
  • 不要delete不是new分配的内存
  • 记住在使用完动态内存后delete
  • 不要使用指向被delete的内存的指针
原文地址:https://www.cnblogs.com/honernan/p/11984103.html