内存与周期

动态分配内存

  • : 在函数内部声明的所有变量都将自动占用栈内存
  • : 这是程序中未使用的内存,在程序运行时可用于动态分配内存

编译时,需要多少内存来存储某个定义变量中的特定信息不确定,所需内存的大小需要在运行时才能确定

new运算符:为给定类型的变量在运行时分配内存,并创建了对象

内存管理

  • 栈内存由系统自动管理,当函数结束调用时,栈上的局部变量会自动销毁;堆内存需要手动管理,即new分配空间,delete释放空间
  • new本质:在上找到一块足够大的连续内存布局,其大小容纳动态分配的大小,返回其内存地址 , 使用指针变量接受

栈内存数组

#include <iostream>
using namespace;
int array[5] = {1,2,3,4,5};  //数组元素已确定

堆内存数组

#include <iostream>
using namespace std;
int main() {
    // new int[5] 返回堆上分配的内存的起始地址,用指针 array 存储
    // array指针 默认指向 new分配的数组内存起始地址 , 而不是&temp(因其不确定)
    // *array = array , 非数组指针(仅指向首地址的指针),  非退化,数组名传递
    int *array = new int[5];  
    // 使用数组
    for (int i = 0; i < 5; ++i) {
        array[i] = i;       // 等价于 *(array + i) = i;
    }
    // 输出数组元素
    for (int i = 0; i < 5; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
    // 释放内存
    delete [] array;  
    return 0;
}

堆内存对象

#include <iostream>
using namespace std;
class Box
{
   public:
      Box() { 
         cout << "调用构造函数!" <<endl; 
      }
      ~Box() { 
         cout << "调用析构函数!" <<endl; 
      }
};
 
int main( )
{
   Box *myBoxArray = new Box[4];  // 对象数组,4次构造
 
   delete [] myBoxArray; // 删除数组,4次析构
   return 0;
}
posted @   NAGISB  阅读(4)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示