【C++篇】剖析内存底沉:C/C++高效内存管理剖析

文章目录

前言

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!

👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力!
🚀分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对C++感兴趣的朋友,让我们一起进步!

内存管理的重要性在于补充:内存管理的重要性在于12:

  • 避免系统崩溃或死机,提高系统的稳定性。
  • 优化内存的使用,提高系统的性能。
  • 提高系统的安全性,避免恶意程序通过修改内存来破坏系统的安全性。
  • 避免内存资源的浪费,提高系统的资源利用率。

由此可见 ,内存管理对计算机程序发挥着至关重要的作用。

1. C/C++ 内存分布

在 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);
}

 上述变量分布情况如下:

内存区域分类:

介绍主要的几个:

。栈(Stack):存储局部变量(如 localVar),以及函数调用时的参数和返回值。
。堆(Heap):存储动态分配的内存(如通过 malloccallocrealloc 分配的内存)。
。数据段(Data Segment):存储全局变量和静态变量(如 globalVarstaticGlobalVar)。
。代码段(Code Segment):存储程序的可执行代码以及只读常量(如 pChar3 所指向的字符串)。

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

C 语言提供了几种用于动态分配内存的函数:malloccallocrealloc 和 free。这些函数用于在程序运行时动态地分配和释放内存。 

2.1 malloc、calloc 和 realloc 的区别


malloc:用于分配指定大小的内存块,内存中的内容未初始化。
。calloc:类似于 malloc,但会将内存初始化为零。它的参数为元素的数量和每个元素的大小。
。realloc:用于调整之前分配的内存块的大小,如果新大小大于原大小,可能会移动内存块的位置。(即扩容

示例:

int* ptr1 = (int*)malloc(sizeof(int) * 4);  // 分配4个int类型大小的内存块
int* ptr2 = (int*)calloc(4, sizeof(int));   // 分配并初始化4个int类型大小的内存块
int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); // 重新分配内存
free(ptr1);
free(ptr3);

2.2 malloc 实现原理 

glibc中malloc实现原理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值