XZ Blog XZ Blog
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xzhouzeng

@渐行。
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 后端开发

    • cmake介绍
    • \{}统一初始化方
    • C++11新特性
    • C++标准推荐使用标准库头文件
    • C++动态内存分配和静态的区别
      • C++类函数后面加const的作用
      • C++类和结构区别
      • C++内存区域
      • nullptr与NULL
      • priority_queue使用
      • string , cstring , string h 的区别
      • using与typedef定义别名区别
      • vector中[]和at访问区别
      • 常量指针和指针常量
      • 空类大小及相关介绍
      • 容器emplace与push操作
      • 数据结构操作——时间复杂度
      • 智能指针(Smart Pointers)
      • 最大堆的实现
    • Git

    • 博客搭建

    • Debug

    • python开发

    • 技术
    • 后端开发
    xzhouzeng
    2023-03-20
    目录

    C++动态内存分配和静态的区别

    # C++动态内存分配和静态的区别

    Created: March 17, 2024 1:26 PM

    在C++中,例如**int s[10];和int* t = new int[10];**这两行代码都创建了一个包含10个整数的数组,但它们在内存分配、生命周期和使用方式上有显著的区别。

    # int s[10];

    • 静态(或自动)内存分配:这种方式在栈上分配内存。**s**是一个大小为10的整型数组,它的大小和生命周期都是在编译时确定的。
    • 生命周期:如果**int s[10];**在函数内部声明,它的生命周期限定在这个函数的执行期间。当函数返回时,这个数组会自动被销毁。
    • 访问方式:直接通过数组名和索引访问元素,例如**s[0] = 100;**。

    # int* t = new int[10];

    • 动态内存分配:这种方式在堆上分配内存,并返回指向这块内存首地址的指针。这行代码声明了一个指向整型的指针**t,并使用new**操作符在堆上分配了一个包含10个整数的数组。
    • 生命周期:由程序员管理。这个数组会一直存在,直到使用**delete[]**操作符显式释放其内存。如果忘记释放,将导致内存泄漏。
    • 访问方式:通过指针访问数组元素,同样是使用索引,例如**t[0] = 100;**。
    • 释放内存:需要使用**delete[] t;**来释放分配的内存。

    # 区别总结

    • 内存分配位置:**int s[10];在栈上分配内存,而int* t = new int[10];**在堆上分配内存。
    • 生命周期管理:栈上分配的数组(s)生命周期由编译器自动管理,而堆上分配的数组(t)需要程序员手动管理。
    • 性能考量:栈上分配和回收速度通常比堆上分配快,但是堆上分配更灵活,能够处理更大的数据量或动态大小的数据。

    使用**new和delete进行动态内存管理提供了更大的灵活性,但也带来了更大的责任,因为需要手动管理内存的生命周期,防止内存泄漏或其他相关问题。在现代C++编程中,通常推荐使用标准库中的容器,如std::vector<int>**, 来代替裸数组和手动内存管理,以减少这种复杂性和潜在的错误。

    编辑 (opens new window)
    C++标准推荐使用标准库头文件
    C++类函数后面加const的作用

    ← C++标准推荐使用标准库头文件 C++类函数后面加const的作用→

    最近更新
    01
    VideoLLMs
    03-20
    02
    Video2Script
    12-07
    03
    多模态
    11-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 xzhouzeng | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式