C++——内存管理
创始人
2024-05-30 18:07:27
0

文章目录

  • 1 C/C++中程序内存区域划分
  • 2 内存分布练习
  • 3 C语言内存管理方式
  • 4 C++内存管理
  • 5 malloc/free和new/delete的对比

1 C/C++中程序内存区域划分

在这里插入图片描述

2 内存分布练习

int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = {1, 2, 3, 4};
char char2[] = "abcd";
char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof (int)*4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4);
free (ptr1);
free (ptr3);
}

globalVar在哪里?数据段——全局变量
staticGlobalVar在哪里?数据段——静态全局变量
staticVar在哪里?数据段——静态变量
localVar在哪里?栈——非静态局部变量
num1 在哪里?栈——非静态局部变量
char2在哪里?栈 ——非静态局部变量
*char2在哪里?栈
pChar3在哪里? 栈——指针,非静态局部变量
*pChar3在哪里?代码段——指针解引用,是只读常量
ptr1在哪里?栈——指针
*ptr1在哪里?堆——malloc在堆上开辟空间

3 C语言内存管理方式

malloc:在堆上开辟空间
realloc:在原地址或新地址进行空间扩容
calloc:在堆上开辟空间并进行初始化

4 C++内存管理

关键字:
new:向堆动态申请内存空间
delete:空间销毁

void Test()
{// 动态申请一个int类型的空间int* ptr4 = new int;// 动态申请一个int类型的空间并初始化为10int* ptr5 = new int(10);// 动态申请3个int类型的空间int* ptr6 = new int[3];int* ptr7 = new int[3]{1,2,3};// 初始化delete ptr4;delete ptr5;delete[] ptr6; // 数组销毁格式delete[] ptr7;
}

5 malloc/free和new/delete的对比

malloc/free和new/delete的共同点是:
都是从堆上申请空间,并且需要用户手动释放。
不同的地方是:

  1. malloc和free是函数,new和delete是操作符
  2. malloc申请的空间不会初始化,new可以初始化
  3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可
  4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型
  5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常
  6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。(对于内置类型new和malloc没有区别,delete和free没有区别)

相关内容

热门资讯

​推进学前教育和托育服务协调可... 来源:法治日报 法治日报全媒体记者 赵晨熙 近日,国家卫生健康委等七部门发布《关于加快推进普惠托育服...
又到港交所铜锣不够用?蓝思科技... 财联社7月9日讯(记者 赵昕睿)港股IPO市场热度持续升温。7月9日,由中信证券独家保荐的蓝思科技于...
合适的小本投资创业好项目 合适...   :乡镇开设中药店城市人嫌麻烦而远离中药,农村中药市场却大有潜力可挖,乡镇现有中药店铺远不能满足需...
*ST建艺副总经理高志强因个人... 7月9日,*ST建艺(维权)(002789)发布公告,董事、副总经理兼财务负责人高志强因个人原因辞职...
想小本创业有什么小项目 想小本... 临近新的一年,没有完成自己目标的朋友有哪些适合一个人做的小本生意呢?总结了几个适合小本创业的项目,希...
第十次全国对口支援新疆工作会议... 据新华社新疆和田7月9日电 第十次全国对口支援新疆工作会议7日至9日在新疆和田召开。中共中央政治局常...
小本创业项目有哪些? 小本创业... 小本创业项目主要有分几类。1、实业类:这一类前期投入比较大,可长期做,而且国家现在对这一块也是有很大...
2019小本创业有哪些好项目 ... 2019小本创业项目有哪些呢?创业和打工不一样,打工只要做好老板吩咐下来的工作就好,创业的话,你就要...
在家小本创业做什么好 小成本创... 生活不易,压力大,每年新增待业人数数额一直呈递增状态,工作也不好找,更不用提找到心仪的工作了,因此小...
新股孖展统计 | 7月9日 首钢朗泽(02553)正在招股中。截止7月9日,富途、辉立、耀才等券商合计为首钢朗泽借出6.6356...