嵌入式学习笔记(60)内存管理之堆

news2024/11/18 7:45:13

1.7.1.什么是堆(heap)

内存管理对OS来说是一件非常复杂的事,因为首先内存容量大,其次内存需求在时间和大小块上没有规律(OS上运行着几十、几百、几千个进程随时都会申请或者释放内存,申请或者释放的内存块大小随意)。

堆这种内存管理方式特点就是自由(随时申请、释放;大小块随意)。堆内存是OS划归给堆管理器(OS中的一段代码,属于OS的内存管理单元)来管理的,然后向使用者(用户进程)提供API(malloc、free)来使用堆内存。

我们会在需要内存容量比较大,需要反复使用及释放时,会使用堆内存。很多数据结构(譬如链表)的实现都需要使用堆内存。

1.7.2.堆管理内存的特点(大块内存、手工分配&使用&释放)

特点1:容量不限(常规使用的需求容量都能满足)。

特点2:申请及释放都需要手工进行,手工进行的含义就是需要写代码明确申请malloc和释放free。如果申请内存并使用后未释放,这段内存就丢失了(在堆管理器的记录中,这段内存仍然属于你这个进程,但是进程自己又以为这段内存已经不用了,再用的时候又会去申请新的内存块,这就叫吃内存。),称为内存泄露。。。在C/C++语言中,内存泄露是最严重的程序bug,这也是Java/C#等语言比C/C++优秀的地方。

1.7.3.C语言操作堆内存的接口(malloc、free)

堆内存释放时最简单,直接调用free释放即可。 void free(void *ptr)

堆内存申请时,有3个可选择的类似功能的函数:malloc、calloc、realloc

void *malloc(size_t size);  

void *calloc(size_t nmemb, size_t size); //nmemb个单元,每个单元size字节

void *realloc(void *ptr, size_t size); //改变原来申请的空间的大小

譬如要申请10个int元素的内存:

malloc(40);         malloc(10*sizeof(int));

calloc(10, 4);        calloc(10, sizeof(int));

数组定义时必须同时给出数组元素的个数(数组大小),而且一旦定义再无法更改。在Java等高级语言中,有一些语法技巧可以更改数组大小,但其实这只是一种障眼法。它的工作原理是:先重新创建一个新的数组大小为要更改后的数组,然后将原数组的所有元素复制进新的数组,然后释放掉原数组,最后返回新的数组给用户。

堆内存申请时必须给定大小,然后一旦申请完成大小不能更改,如果要变更,只能通过realloc接口。realloc的实现原理类似于上边说的Java中的可变大小的数组的方式。

1.7.4.堆的优势和劣势(管理大块内存、灵活、容易内存泄露)

优势:灵活

劣势:需要人为处理各种细节,所以容易出错

  嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区私信“嵌入式”0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb从入门到起飞笔记——导学课程

学完这一节,我不知道学Web开发究竟能干什么?你知道吗? 以下是黑马程序员Java从入门到起飞的笔记 一、学完Javaweb能干什么? 学完Java后我们可以独立开发一些后台管理系统,例如CRMER器,京东和淘宝&#x…

tuxera ntfs2024破解版mac电脑磁盘读写软件

大家都知道由于操作系统的原因,在苹果电脑上不能够读写NTFS磁盘,但是,今天小编带来的这款tuxera ntfs 2024 mac版,完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件,能够实现苹果Mac OS X系统读写Micro…

C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转

简介 字符串编码转换封装函数,UTF-8编码与本地编码互转。 中文乱码的解决方法 有时候我们会遇到乱码的字符串,比如: 古文码 可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(string str)函数转换一下就可以了。…

RFID解决光伏难题

RFID解决光伏难题 RFID是无线射频识别(Radio Frequency Identification)的缩写,是一种通过无线电信号识别物体的技术。RFID系统由标签、读写器和主机系统组成。标签内置有微型芯片和天线,能够储存和传输数据。读写器通过射频信号…

EasyCVR视频智能分析系统如何助力广场流动摊贩监管手段升级

在很多公园广场地带,经常会有流动摊贩进行售卖,虽然国家大力支持“地摊经济”,但很多摊贩并未按照规定进行摆摊,甚至有一些摊贩为了位置、客源大打出手,大大增添了城市管理难度。为让广场摊贩更加规范地进行作业&#…

mybatisplus开启sql打印的三种方式

1、在application.yml文件中添加mybatisplus的配置文件 使用mybatisplus自带的log-impl配置,可以在控制台打印出sql语句、执行结果的数据集、数据结果条数等详细信息,这种方法适合再调试的时候使用,因为这个展示的信息详细,更便于…

Windows11系统安装WSL教程

WSL,全称Windows Subsystem for Linux,是微软官方提供的可以在Windows上直接运行的Linux环境,包括大多数命令行工具、程序和应用,由系统底层虚拟机平台支持。 开启相关服务 1、控制面板-启用或关闭Windows功能 2、勾选以下两个…

Dataspell快捷键更改为eclipse后,在.py文件中shift+回车自动换行冲突问题解决

1.问题描述 已经将Dataspell快捷键切换快捷键为eclipse,在.py文件中shiftenter没有自动换行,出现如下结果。 2.问题解决 进去keymap配置界面 搜索python 将如下快捷键删除。 测试后问题已经解决。

Yakit工具篇:中间人攻击(平替Burp)的相关技巧-01

简介(来自官方文档) 背景 “MITM” 是 “Man-in-the-Middle” 的缩写,意思是中间人攻击。 MITM攻击是一种网络攻击技术,攻击者通过欺骗的手段,让自己成为通信双方之间的中间人,从而可以窃取双方之间的通信内容、修改通信内容、…

ntfs读写工具Tuxera NTFS2023激活码

Tuxera NTFS for Mac是一款mac系统读写工具,Tuxera让Mac OS支持NTFS 格式文件读写,支持所有移动硬盘、U盘等外接设备,同时Tuxera用户可以简单直观的在Mac机上随意对NTFS文件修改、 在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件。当您获…

关于硬件原理图

很多纯软工程师开始做嵌入式时觉得门槛很高,基本的硬件原理图也看不懂,没有学过电路、数电、模电、电路原理,对电子元器件,对电阻、电压、电流、电容、电感等没有很扎实的概念,觉得老虎吃天无从下嘴。打开硬件原理图&a…

在Qt中怎么操作MySQL数据库

一、安装驱动 (1)安装 在Qt中操作MySQL数据库首先要安装mysql的驱动文件,将MySQL下的libmusql.dll文件复制到Qt的安装路径下的bin文件夹下即可。 本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(…

使用Chrome浏览器进行网页截图

在需要截图的网页上,按F12打开开发调试页面,再按下ShiftCtrlP,打开命令输入框,输入Capture, 此时会弹出4中截图模式,我个人比较喜欢用Capture full size screenshot Capture area screenshot,…

YB6502是一款5V输入支持两节串联磷酸铁锂电池的升压充电管理应用

5V输入、双节串联磷酸铁锂电池升压充电芯片 描述: YB6502是一款5V输入支持两节串联磷酸铁锂电池的升压充电管理应用。采用了开 关升压结构,带有散热片的S0P8封装与较少的外部元件数日使得YB6502成为便携式 应用的理想选择。YB6502输入电压为5V,内置自适应…

Hadoop3教程(二十九):(生产调优篇)集群扩容及缩容(白名单与黑名单)

文章目录 (150)添加白名单(151)服役新服务器(152)服务器间数据均衡(153)黑名单退役服务器参考文献 这一章还算是比较重要的。 (150)添加白名单 白名单&#…

Kotlin(七) 接口

接口是用于实现多态编程的重要组成部分。我们都知道,Java是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此。 首先创建一个Study接口,在创建文件窗口选择“Interface…

1688店铺所有商品数据接口及店铺商品数据分析

获取1688店铺所有商品数据的接口是1688开放平台提供的接口,通过该接口可以获取店铺所有商品数据。 通过1688开放平台接口获取店铺所有商品数据的方法如下: 在开放平台注册成为开发者并创建一个应用,获取到所需的 App Key 和 App Secret 等信…

【公益案例展】联想集团青梅计划

‍ 联想集团公益案例 本项目案例由联想集团投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在全面实现社会主义现代化国家的目标下,中…

重要文件怎么加密?文件加密软件哪个好用?

当我们在使用电脑的过程中,我们需要使用到很多重要文件,为了保护文件的安全,我们需要进行加密保护。那么,重要文件该怎么加密呢?下面我们就一起来了解一下。 文件夹加密超级大师 文件夹加密超级大师是一款专业的电脑数…

一文了解线上展厅如何制作,线上展厅制作需要注意什么

引言: 随着数字化时代的来临,线上展厅已成为宣传营销的重要工具,让您能够展示产品、服务和品牌的独特之处。如何制作线上展厅,包括必须注意的因素成了很多人关注的重点。 一.制作线上展厅的步骤 1.确定展厅目标和内容…