内存与周期
动态分配内存
栈
: 在函数内部声明的所有变量都将自动
占用栈内存堆
: 这是程序中未使用的内存,在程序运行时可用于动态分配
内存
编译时,需要多少内存来存储某个定义变量中的特定信息
不确定
,所需内存的大小需要在运行时才能确定
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?