C/C++重点解析:内存管理

本文详细介绍了C/C++中内存分配的几种方式,如malloc、calloc、realloc和new/delete,以及它们的原理和使用场景。同时探讨了自定义类型内存管理的构造/析构函数调用,new和delete表达式的实现,并针对内存泄漏的概念、危害及检测方法进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. C/C++内存分布

​编辑

2. C语言中动态内存管理方式

(1)malloc:

(2)  calloc:

(3)  realloc:

3. C++内存管理方式

3.1 new/delete操作内置类型

3.2 new和delete操作自定义类型

4. operator new与operator delete函数

4.1 operator new与operator delete函数(重点)

5. new和delete的实现原理

5.1 对于内置类型

5.2 自定义类型

6. 定位new表达式(placement-new)

7. 常见面试题

7.1 malloc/free和new/delete的区别

7.2 内存泄漏

7.2.1 什么是内存泄漏,内存泄漏的危害

7.2.3 如何检测内存泄漏

7.2.4如何避免内存泄漏


1. C/C++内存分布

我们先来看一段代码和其相关问题:

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";
    const 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);
}
1. 选择题:
 选项: A.栈  B.堆  C.数据段(静态区)  D.代码段(常量区)

 globalVar在哪里?__C__  staticGlobalVar在哪里?__C__
 staticVar在哪里?__C__  localVar在哪里?__A__
 num1 在哪里?__A__

 char2在哪里?__A__  *char2在哪里?__A__
 pChar3在哪里?__A__    *pChar3在哪里?__D__
 ptr1在哪里?__A__     *ptr1在哪里?__B__
2. 填空题:(x64环境下)
 sizeof(num1) = __40__; 
 sizeof(char2) = __5__;    strlen(char2) = __4__;
 sizeof(pChar3) = __8__;   strlen(pChar3) = __4__;
 sizeof(ptr1) = __8__;

3. sizeof 和 strlen 区别?
1:sizeof:计算所占空间字节的大小(包括‘\0’)。
2:strlen:计算字符串长度,遇到‘\0’停止。

【说明】
1. 又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。
2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口
创建共享共享内存,做进程间通信。
3. 用于程序运行时动态内存分配,堆是可以上增长的。
4. 数据段--存储全局数据和静态数据。
5. 代码段--可执行的代码/只读常量。

2. C语言中动态内存管理方式

【面试题】
1. malloc/calloc/realloc的区别?

(1)malloc:

 

(2)  calloc:

(3)  realloc:

简单来说:realloc分为异地调整和原地调整。

2. malloc的实现原理?

【CTF】GLibc堆利用入门-机制介绍_哔哩哔哩_bilibiliCTF Pwn中堆相关机制的入门讲解。内容比较浅,讲得也比较快,如果发现什么错误还望指正。, 视频播放量 5468、弹幕量 11、点赞数 153、投硬币枚数 140、收藏人数 289、转发人数 30, 视频作者 bili53448916889, 作者简介 开学了,大概会更得慢一点?,相关视频:【CTF】GLibc堆利用-Double Free,【CTF Pwn】GLibc堆利用-Off-By-One,【CTF】GLibc堆利用-First fit & UAF,BeginCTF-PWN,【整整600集】清华大学196小时讲完的Python教程(数据分析)零基础入门到精通全套教程,全程干货无废话,这还学不会,我退出IT圈!数据挖掘/可视化/大数据,PWN入门2.0-初遇PWN,【全268集】北京大学168小时讲完的Python(数据分析)教程,通俗易懂,2024最新版,全程干货无废话,这还学不会,我退出IT界!,有了这个神器,再也不怕屎山代码了!,PWN入门2.0-NC签到_进阶,学不会我退出红客圈!中国红客技术需要继承人!整整1200集不怕学不会?从零基础学习网络安全!(黑客技术/红客教学/网络安全/红客技术/渗透测试)icon-default.png?t=N7T8h

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值