本文共 1817 字,大约阅读时间需要 6 分钟。
C/C++程序运行时的内存分布主要包括以下几个部分:
这些内存区域的分配和管理是程序运行的核心基础。
C语言通过一系列标准函数进行动态内存管理,核心函数包括:
这些函数适用于内置类型和自定义类型的内存管理。
C++在内存管理上引入了更高级的机制:
int* ptr = new int;:动态申请内存。delete ptr;:释放内存。int* arr = new int[10];:申请数组内存。delete[] arr;:释放数组内存。new和delete不仅管理内存空间,还自动调用对象的构造函数和析构函数。内置类型与自定义类型的区别
int),new和malloc功能相似,但new更高效且更安全。Date类),new和delete负责调用构造函数和析构函数。内存申请与释放流程
operator new申请空间,并执行构造函数。operator delete释放空间。数组内存管理
new[]和delete[]用于管理多个对象的内存,new[]申请连续空间,delete[]释放连续空间。class Date {public: Date(int year, int month, int day) { cout << "调用了构造函数" << endl; _year = year; _month = month; _day = day; } ~Date() { cout << "调用了析构函数" << endl; }private: int _year; int _month; int _day;}; C语言实现:
void* ptr = malloc(sizeof(Date));Date* obj = static_cast(ptr);free(ptr);
这种方式不会调用构造函数或析构函数。
C++实现:
Date* obj = new Date(2024, 5, 20);delete obj;
new和delete自动管理内存及构造析构函数。
operator new和delete不是关键字
内存管理流程
new:申请空间并调用构造函数。delete:调用析构函数后释放空间。数组内存管理
new[]:申请连续空间并初始化多个对象。delete[]:释放连续空间,并调用每个对象的析构函数。内存管理原则
new和delete代替malloc和free,以享受构造析构函数的自动调用。shared_ptr)管理内存。常见错误
delete:delete[]用于数组,delete用于单个对象。new和malloc:会导致内存不一致,程序崩溃。性能优化
new[]和delete[]管理数组内存时,效率更高。通过以上实践和总结,您可以更高效地管理C/C++程序的内存资源,提升代码质量和性能。
转载地址:http://gcsi.baihongyu.com/