iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中内存管理的示例分析
  • 422
分享到

C++中内存管理的示例分析

2023-06-25 15:06:07 422人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关c++中内存管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述内存管理的原理庞大而复杂,然而这些都被操作系统进行了封装,并对外预留了api,这些api被c++调用

这篇文章将为大家详细讲解有关c++中内存管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

概述

内存管理的原理庞大而复杂,然而这些都被操作系统进行了封装,并对外预留了api,这些api被c++调用,同时也被c++再次进行了封装,再面向程序员预留出了语法特性的接口,作为使用c++的程序员,我们只需要掌握c++预留的内存管理特性即可,就像我们开车不需要管变数箱、发动机是怎么变速、点火的,我们只需要掌握汽车给我们预留的接口,方向盘、刹车、油门如何使用即可。

c++程序容易出bug,主要就是因为内存管理部分的复杂性 ,java、python等语言提供了更多的封装,所以降低了程序员的操作难度和犯错的可能。就像自动档的汽车一样,没有了离合,自然就不会因操作失误把变速箱损坏。

c++可用内存

C语言的可用内存

在c语言中我们的可用内存主要分以下几个区域:

  • 栈,用于存放局部变量。

  • 全局数据区/静态数据区,用于存放全局变量和静态局部变量。

  • const数据区,该区域在内存中实际是没有指定分区的,他存在于全局数据区或者栈中,const不能被修改是被编译器限制的,在物理内存中根本就没有只读类型的内存。所以有时候我们在讨论分区的时候,不会提到const区,因为他根本就没有独立存在。

  • 代码段,当然是用来存放代码,在linux下,我们的可执行代码从rom中读取到内存中执行,虽说内存可读可写,但是在操作系统的监控下,这段内存也是只读不写的区域。

  • 堆,c中的堆由malloc申请,free释放,底层也是由操作系统提供给我们的程序的一段内存。

c++新增内存区域

c中的内存分区在c++中全部都存在,而c++新增了自由存储区,使用new来申请,delet来释放,实际和malloc申请的内存在一个区域,new使用内存示例如下:

int *p = new int;*p=6;cout << "*p=" << *p << endl;delete p;

new和malloc

linux平台中new内部其实还是通过malooc来申请的内存,只是附加做了些其他工作,例如调用类的构造函数来初始化。malloc返回的就像一块荒地,需要你自己来规划,而new返回的是一个修好基建的区域给你。

malloc

new

c库函数

运算符、关键字

分配空间由传参决定

大小由数据类型决定,编译器自动计算

返回值void *

明确的类型,申请啥返回啥

free释放

delete、delet[ ]释放

申请内存不初始化

可以隐式和显示初始化

无构造函数

执行构造函数

申请失败返回NULL

申请失败返回bad_alloc异常

智能指针引入

我们说,cpu决定了汇编指令、汇编决定了c和c++,所以C/C++的指针是天然的,用来支持汇编的间接寻址,可以说是cpu决定的指针。所以指针是无法避开的,指针的优势是太灵活,劣势也是太灵活,尤其是与动态内存、构造、析构结合使用后容易出错,所以c++发明了一种智能指针,有程序员和专门设计的自动管理机制共同把控以减少出错。这种自动管理机制在c中就有体现,如栈就是自动管理的结果。

智能指针是普通指针的升级版,本身具备指针的功能,且多出一些自动释放资源的机制,当然,智能指针的使用会比普通指针要多消耗一些资源和开销。在c++中,智能指针不是唯一的,有很多类型的智能指针,各有优劣和适应的场景。使用智能指针时,须按照设计,正确使用,否则容易导致灾难。

智能指针的实现

将普通指针封装为栈式复合指针对象,内部包含了除了真正指向目标的指针外还有些其他东西,如使用次数记录等,要使用智能指针,我们需要注意以下问题:

  • 将智能指针本身定义为局部(栈上),实现指针本身被自动回收的。

  • 智能指针内部设计为当指针本身要被弹栈释放时,执行事先挂接好的清理函数,也就是说智能指针内部应该有一个函数指针,指向我们的清理函数。

  • 智能指针需要使用库为其提供的方法和运算符来重载使用。

java延伸

java语言整体框架

为了保证知识的完整,我们简单的介绍一下java的内容,来了解一些优质方法。

cpu ->系统内核 -> 应用层框架 -> java虚拟机 -> Java字节码 -> java源码

从上面的架构,我们能看出来,java比c/c++多了三层,java的源码编译输出的并不是cpu可执行的机器码,而是被编译成java字节码,这个东西完全是java自己定义的一种东西,只能在JVM(java虚拟机)上运行, JVM再基于一些内核提供的框架来运行,所以说java是一种解释性语言,他完全靠JVM进行解释,而c/c++是编译型语言,源码直接编译成cpu可执行的机器码。正因为有了JVM,所以java可以跨平台运行,哪里有JVM哪里就可以运行java,前提是不同平台的JVM能相互兼容,java的运行稳定性取决于JVM。

java的垃圾回收机制

java有一个专门做垃圾回收的守护进程,GC线程,他内部使用GC机制和算法来得到生命周期结束的变量对象,把这些对象当成垃圾进行回收。

实际上垃圾回收并不是java的专利,其他语言,如C#也有类似的设计理念,典型的就是他们都没有指针,其垃圾回收机制让程序员免于考虑对象的生命周期和资源的申请与释放,使得这门语言非常好学,其实垃圾回收机制的背后都是以效率和内存资源为代价,换来的不易出错,简单好用。

关于“C++中内存管理的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: C++中内存管理的示例分析

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

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

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

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

下载Word文档
猜你喜欢
  • C++中内存管理的示例分析
    这篇文章将为大家详细讲解有关C++中内存管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述内存管理的原理庞大而复杂,然而这些都被操作系统进行了封装,并对外预留了API,这些api被c++调用...
    99+
    2023-06-25
  • C/C++内存管理的示例分析
    这篇文章主要介绍了C/C++内存管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C/C++赋予程序员管理内存的自由,是C/C++语言特色,虽然这引入了复杂度和危险...
    99+
    2023-06-15
  • C/C++中指针与内存管理的示例分析
    这篇文章主要介绍了C/C++中指针与内存管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。指针和内存管理始终是C/C++比较容易模糊的知识点,但在C/C++编程中又...
    99+
    2023-06-29
  • JS中内存管理的示例分析
    这篇文章将为大家详细讲解有关JS中内存管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言像C语言这样的底层语言一般都有底层的内存管理接口,比如 malloc...
    99+
    2024-04-02
  • C语言中动态内存管理的示例分析
    这篇文章主要介绍了C语言中动态内存管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是动态内存分配我们都知道在C语言中,定义变量的时候,系统就会为这个变量分配内...
    99+
    2023-06-25
  • C#内存管理举例分析
    本篇内容主要讲解“C#内存管理举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#内存管理举例分析”吧!C#内存管理C#内存管理提供了与java一样的自动内存管理功能,让程序员从繁重的内存...
    99+
    2023-06-17
  • Linux内存管理之内存回收的示例分析
    这篇文章主要介绍了Linux内存管理之内存回收的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.1 内存回收的目标不是所有的物理内存都可以参与回收的,比如要是把内核...
    99+
    2023-06-16
  • FreeRTOS动态内存分配管理示例分析
    本篇内容主要讲解“FreeRTOS动态内存分配管理示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“FreeRTOS动态内存分配管理示例分析”吧!动态内存管理FreeRTOS提供5种动态内存...
    99+
    2023-06-29
  • C语言中动态内存管理实例分析
    今天小编给大家分享一下C语言中动态内存管理实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.动态内存开辟的原因常见的...
    99+
    2023-07-02
  • C++ 内存管理原理分析
    目录1.C/C++中程序内存分布1.1 内存分布图1.2 小试牛刀2.C语言部分的动态内存管理方式3.C++内存管理方式3.1new/delete操作内置类型3.2 new...
    99+
    2024-04-02
  • java内存管理与内存溢出异常的示例分析
    这篇文章主要介绍了java内存管理与内存溢出异常的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说到内存管理,笔者这里想先比较一下java与C、C++之间的区别:在C...
    99+
    2023-05-31
    java
  • C++技术中的内存管理:内存泄漏的典型案例分析
    c++++ 中常见的内存泄漏类型包括栈泄漏、堆泄漏和全局泄漏。本文通过一个实战案例分析了堆泄漏。该示例中,一个动态分配的指针在函数返回时丢失了作用域,但分配的内存未释放,导致内存泄漏。可...
    99+
    2024-05-08
    内存泄漏 内存管理 c++ 作用域
  • Java应用程序中内存泄漏及内存管理的示例分析
    这篇文章主要介绍Java应用程序中内存泄漏及内存管理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!btw,一些静态代码扫描工具也能检测出不好的编程习惯带来潜在的内存泄露的风险。Java平台的一个突出的特性是...
    99+
    2023-06-02
  • Python的内存管理举例分析
    这篇文章主要介绍“Python的内存管理举例分析”,在日常操作中,相信很多人在Python的内存管理举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python的内存管理举例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • MySQL内存管理,内存分配器和操作系统的示例分析
    这篇文章主要介绍MySQL内存管理,内存分配器和操作系统的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!当用户使用任何软件(包括MySQL)碰到内存问题时,我们第一反应就是内...
    99+
    2024-04-02
  • iOS内存管理引用计数示例分析
    目录内存管理机制isaSideTable内存管理机制 目前流行的内存管理机制主要有GC和RC两种。 GC (Garbage Collection):垃圾回收机制,定期查找不再使用的...
    99+
    2023-01-06
    iOS内存管理引用计数 iOS 引用计数
  • C语言中动态内存的示例分析
    这篇文章主要为大家展示了“C语言中动态内存的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中动态内存的示例分析”这篇文章吧。1.关于动态内存的函数1.1 malloc和free函数...
    99+
    2023-06-29
  • 分析JS中的内存管理
    这篇文章主要讲解了“分析JS中的内存管理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析JS中的内存管理”吧!前言像C语言这样的底层语言一般都有底层的内存...
    99+
    2024-04-02
  • 关于C/C++内存管理示例详解
    1、内存分配方式 在C++中,内存分成五个区,分别是堆、栈、自由存储区、静态存储区和常量存储区。 1) 栈 执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这...
    99+
    2024-04-02
  • sql server中内存的示例分析
    这篇文章将为大家详细讲解有关sql server中内存的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 前言 对于sql server 这个产品来说...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作