C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比

06-02 1045阅读

C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比

  • 前言
  • 一、C/C++语言中内存分布
    • 1.内核空间
    • 2.栈
    • 3.堆
    • 4.数据段
    • 5.代码段
    • 二、例题带练巩固C/C++语言中内存分布的知识
      • 题目讲解
      • 题目答案
      • 三、C语言动态内存分配(知识回顾)
        • 3.1 为什么需要动态内存分配
        • 3.2 malloc 函数
        • 3.3 calloc 函数
        • 3.4 realloc 函数
        • 3.5 free 函数
        • 3.6 C语言动态内存分配的缺点
        • 四、C++动态内存分配
          • 1. new 和 delete
          • 2. new[] 和 delete[] 运算符
          • 五、C与C++内存管理对比
            • 5.1 C语言内存管理
            • 5.2 C++内存管理
            • 5.3 C 与 C++ 内存管理对比表格

              前言

              • 在之前的博客系列中,我们深入探讨了C++的第一个重要阶段——类和对象,以及与之相关的诸多核心内容,包括四大构造函数、类的种类、内部类、匿名类、友元等。
              • 这些知识点如同坚实的基石,为后续的C++学习构建了稳固的基础,帮助我们逐步建立起对C++面向对象编程的深刻理解。

                我的个人主页,欢迎来阅读我的其他文章

                https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

                我的C++知识文章专栏

                欢迎来阅读指出不足

                https://blog.csdn.net/2402_83322742/category_12880513.html?spm=1001.2014.3001.5482

                • 接下来,我们将开启新的篇章,深入剖析C/C++语言中的内存分布,并对比C与C++在内存管理方面的差异。

                  一、C/C++语言中内存分布

                  C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比

                  1.内核空间

                  • 内核空间(Kernel Space):相当于 “管理层办公室”,存放着操作系统的核心代码(比如管理 CPU、内存、硬盘的程序)。只有 “管理层”(内核程序)能进去,普通程序不能随便访问,权限很高,负责处理最底层的硬件资源。

                    2.栈

                    • 栈是一种后进先出(LIFO)的数据结构,用于存储局部变量、函数调用信息等。
                    • 每当调用一个函数时,系统会在栈上为该函数的局部变量分配内存,函数执行完毕后,这些内存会被自动释放。

                      想象你去食堂打饭,餐盘是按顺序叠起来的:后放上去的餐盘先被拿走(后进先出)。

                      • 栈就是这样一个 “自动清理的临时货架”,存放函数运行时的 临时数据(比如局部变量、函数参数、返回地址)。程序会自动分配和释放空间,不需要你手动管理。
                        // 函数,函数代码存储在代码段
                        void func() {
                            // 局部变量,存储在栈上
                            int local_variable = 30;
                            std::cout 
                            func();
                         }
                        
                            static int static_age = 18;  // 静态局部变量,也存在数据段
                        }
                        
                         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);
                         }
                        
                         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);
                         }
                        
                            // 分配一个能存储 5 个整数的内存块
                            int *ptr = (int *)malloc(5 * sizeof(int));
                            if (ptr == NULL) {
                                printf("内存分配失败\n");
                                return 1;
                            }
                            // 给分配的内存块赋值
                            for (int i = 0; i 
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码