• 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的内存的指针
  • 相关阅读:
    vue CDN seting
    AutoMapper
    c# list<class> to datatable
    vue watch
    net core 3.1 open file
    net core 3.1 area Global
    net core 3.1 area
    ef core log
    3.1 ef core
    3.1 daper
  • 原文地址:https://www.cnblogs.com/honernan/p/11984103.html
Copyright © 2020-2023  润新知