iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++内存管理的知识点有哪些
  • 471
分享到

C++内存管理的知识点有哪些

2023-07-05 17:07:40 471人浏览 八月长安
摘要

这篇文章主要讲解了“c++内存管理的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++内存管理的知识点有哪些”吧!1. 简述下C++的内存分配方式。在C++中,内存可以分为 5

这篇文章主要讲解了“c++内存管理的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++内存管理的知识点有哪些”吧!

1. 简述下C++的内存分配方式。

  • 在C++中,内存可以分为 5 个区,分别为栈,堆,自由存储区,全局/静态变量,常量存储区

  • (1):在执行函数时,函数内局部变量的存储单元在栈上创建,函数执行完时这些存储单元被自动释放。

  • (2):通过 malloc 分配的内存块,通常和 free 搭配,需要手动释放。

  • (3)自由存储区:通过 new 分配的内存块,通常和 delete 搭配,也需要手动释放。

  • (4)全局/静态存储区:用于存储全局变量和静态变量。

  • (5)常量存储区:用于存放常量,不允许修改。

 2. 简述下栈和堆的区别。

  • (1)空间分配不同:栈存放函数内的局部变量,由操作系统自动释放;堆通过 malloc 分配,需要手动释放。

  • (2)缓存方式不同:栈使用的是一级缓存,被调用时处于存储空间;堆使用的是二级缓存,速度要慢些。

  • (3)数据结构不同:栈类似栈结构,先进后出;堆类似数组结构,先进先出。

3. malloc 和局部变量分配在堆还是栈?

  • malloc 分配在堆中,他会分配一块指定大小的内存空间,并返回一个指针,使用完毕后需要手动回收。

  • 局部变量分配在在栈中,超过作用域后系统自动回收。

 4. 程序有哪些部分?分别的作用是什么?

  • (1)数据段:存放程序中已初始化的全局变量和静态变量。

  • (2)代码段:存放程序执行代码的一块区域,头部包含一些常数变量。

  • (3)BSS段:存放程序中未初始化的全局变量和静态变量的一块区域。

  • (4)可执行程序在运行时会多出两个区域:

  • :动态申请内存用。从低向高增长。

  • :存储局部变量,函数参数值。从高向低增长。

  • (5)在堆和栈之间有个文件映射区。

5. 程序的执行过程是怎么样的?

  • (1)操作系统创建相应的进程并分配进程空间,加载器把可执行文件中的代码段,数据段映射到进程中的虚拟空间。

  • (2)加载器读入可执行程序中的导入符号表,根据符号表可以查询需依赖的动态依赖库。

  • (3)加载器将程序中的动态依赖库进行导入。

  • (4)初始化应用程序中的全局变量,对于全局变量自动调用构造函数。

  • (5)进入程序入口函数开始执行。

6. 初始化为 0 的全局变量在 bss 还是 data 区?

  • 数据区:存放初始化不为 0 的全局变量和静态变量。

  • BSS区:存放初始化为 0 或未初始化的全局变量和静态变量。

7. 什么是内存泄漏?如何解决?

内存泄漏:

  • 申请了一块儿内存空间,但是使用完毕后没有释放。

  • (1)new 和 malloc 申请后,没有使用 delete 和 free 释放。

  • (2)子类继承父类时,父类析构函数不是虚函数。

  • (3)windows 句柄资源使用后没有释放。

对策:

  • (1)养成良好的编程习惯,分配的内配使用后,记的释放。

  • (2)将分配内存的指针以链表的形式存储,使用完毕后从链表中删除进行管理。

  • (3)使用智能指针。

8. 常见的内存错误有哪些?

常见内存错误:

  • (1)内存分配未成功却使用。

  • (2)内存分配成功,但是未初始化就引用。

  • (3)内存分配成功并初始化,但是操作超出了内存的边界。

  • (4)忘记了释放内存,造成内存泄漏。

  • (5)释放了内存却继续使用。

对策:

  • (1)用 malloc 或 new 申请内存后,应该检查返回的指针是否为 NULL。

  • (2)为指针初始化为 NULL,为数组和动态内存赋初值。

  • (3)避免数组越界。

  • (4)动态内存的申请和释放必须配对。

  • (5)用 free 和 delete 释放内存之后,指针应该置空防止野指针。

  • (6)使用智能指针。

9. 什么是内存对齐?

  • 为了能够使 CPU 进行快速的访问,变量的起始地址应该具有某些特征,即对齐。比如 4 字节的 int,起始地址应该在 4 字节的边界上。

  • 假如变量的地址不是自然对齐,那么 CPU 要访问该值的话需要访问两次或三次内存,而对齐的话只需要一次,访问的速度更快。

  • 内存对齐一般应用在 struct,class,uNIOn 数据类型中。

感谢各位的阅读,以上就是“C++内存管理的知识点有哪些”的内容了,经过本文的学习后,相信大家对C++内存管理的知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++内存管理的知识点有哪些

本文链接: https://www.lsjlt.com/news/353806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++内存管理的知识点有哪些
    这篇文章主要讲解了“C++内存管理的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++内存管理的知识点有哪些”吧!1. 简述下C++的内存分配方式。在C++中,内存可以分为 5...
    99+
    2023-07-05
  • Linux内存管理的知识点有哪些
    这篇文章主要介绍“Linux内存管理的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux内存管理的知识点有哪些”文章能帮助大家解决问题。1 前言内存管理是Linux内核中非常重要的...
    99+
    2023-06-16
  • Java虚拟机内存管理知识有哪些
    这篇文章主要讲解了“Java虚拟机内存管理知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java虚拟机内存管理知识有哪些”吧!0、Java 对内存的划分:Java虚拟机规范将物理内...
    99+
    2023-06-04
  • Java内存模型的知识点有哪些
    这篇文章主要介绍“Java内存模型的知识点有哪些”,在日常操作中,相信很多人在Java内存模型的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存模型的知识点有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • Linux系统内存知识点有哪些
    这篇文章主要介绍Linux系统内存知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、走进 linux 内存1、内存是什么?1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成2)内存的特点...
    99+
    2023-06-15
  • .NET内存分配的知识点有哪些
    这篇文章主要讲解了“.NET内存分配的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET内存分配的知识点有哪些”吧!在分析内存分配时,应该先了解关于堆栈的区别堆的分配向高地址...
    99+
    2023-06-17
  • 有哪些数据库内存知识点
    本篇内容介绍了“有哪些数据库内存知识点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、如何看懂内存指标遇...
    99+
    2024-04-02
  • Oracle内存和架构知识点有哪些
    本篇内容介绍了“Oracle内存和架构知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Oracl...
    99+
    2024-04-02
  • Linux内核中的内存屏障知识点有哪些
    本篇内容主要讲解“Linux内核中的内存屏障知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内核中的内存屏障知识点有哪些”吧!缓存一致性之前一直认为linux中很多东西是用来...
    99+
    2023-06-16
  • C++内存模型与名称空间的知识点有哪些
    这篇文章主要介绍“C++内存模型与名称空间的知识点有哪些”,在日常操作中,相信很多人在C++内存模型与名称空间的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内存模型与名称空间的知识点有哪些...
    99+
    2023-07-04
  • 浅谈C++内存管理基础知识
    目录概述c++可用内存c语言的可用内存c++新增内存区域new和malloc智能指针引入智能指针的实现java延伸java语言整体框架java的垃圾回收机制总结 概述 内存管理的原理...
    99+
    2024-04-02
  • C++固定内存块分配器相关知识点有哪些
    这篇文章主要讲解了“C++固定内存块分配器相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++固定内存块分配器相关知识点有哪些”吧!回收内存存储内存管理模式的基本哲学是在对象...
    99+
    2023-06-17
  • C/C++指针知识点有哪些
    本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用...
    99+
    2023-06-03
  • c++11 chrono的知识点有哪些
    这篇文章主要介绍“c++11 chrono的知识点有哪些”,在日常操作中,相信很多人在c++11 chrono的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++11&nbs...
    99+
    2023-06-21
  • C++语法知识点有哪些
    这篇文章主要讲解了“C++语法知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++语法知识点有哪些”吧!C++程序的组成 (1)预处理命令以#开头。三类预处理命令。A 宏定义命令...
    99+
    2023-06-17
  • C++的基础知识点有哪些
    这篇文章主要介绍“C++的基础知识点有哪些”,在日常操作中,相信很多人在C++的基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的基础知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • Redis内存模型及应用知识点有哪些
    这篇文章主要介绍了Redis内存模型及应用知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis内存模型及应用知识点有哪些文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • C#中所要知道的知识点有哪些
    本文小编为大家详细介绍“C#中所要知道的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中所要知道的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.在C#中,类名首字母需大写。如:c...
    99+
    2023-07-05
  • go内存管理的优缺点有哪些
    Go语言的内存管理具有以下优点:1. 自动垃圾回收(GC):Go语言具有自动垃圾回收机制,开发者无需手动释放内存。Go语言的GC采用...
    99+
    2023-10-21
    go
  • C++中引用的知识点有哪些
    本篇内容主要讲解“C++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作