0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式软件开发的动态内存分配解决问题

星星科技指导员 来源:嵌入式计算设计 作者:Colin Walls 2022-06-30 14:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

越来越多的嵌入式软件开发人员意识到动态内存分配——在需要时获取大块内存并在以后放弃它们——虽然方便灵活,但也充满了问题。这些问题不仅限于嵌入式代码,许多桌面应用程序都存在影响性能和可靠性的内存泄漏。但在这里我想专注于嵌入式。

质疑使用标准malloc()库函数的三个关键原因:

内存分配可能会失败。这可能是因为没有足够的可用内存(在堆中)来满足请求。也可能是碎片造成的;有足够的可用内存,但没有连续的块足够大。

该函数通常是不可重入的。在多线程(多任务)系统中,如果函数被多个任务调用,则它们必须是可重入的。这确保了,如果调用被中断,对该函数的另一次调用不会危及第一次调用。

它不是确定性的。在实时系统中,可预测性(确定性)至关重要。标准malloc()函数的执行时间非常多变且无法预测。

pYYBAGK9RKuAQrwQAAB-d-GRdEM349.png

这些都是有效的点,并且有解决它们的方法,这通常是使用实时操作系统 (RTOS) 提供的功能的问题。

然而,尽管它们是有效的,但问题可能并不总是像看起来那么重要:

如果发生分配失败,该函数将返回一个NULL指针。这很容易检查,并且可以采取行动。

在许多应用程序中,所有内存分配和释放都在单个任务中执行。这使得重入是不必要的。

并非所有嵌入式系统都是实时的,因此可能不需要确定性。

malloc()可能会带来另一个挑战:它相当慢。一些系统需要速度,而不是可预测性,因此需要考虑找到一种方法来提供此功能的功能并具有更高的性能。

该函数性能不佳的主要原因是它提供了很多功能。不同大小的内存块的管理是相当复杂的。对于许多应用程序来说,这实际上是多余的,因为所需的内存分配都是相同的大小(或少量不同的已知大小)。为固定大小的块编写内存分配器非常简单;只是一个带有使用标志的数组或者一个链表。代码肯定会更快,甚至可以确定地完成。分配失败仍然可能发生,但管理起来很简单。这种类型的内存分配通常由流行的 RTOS 产品提供。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328907
  • RTOS
    +关注

    关注

    25

    文章

    862

    浏览量

    122613
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32嵌入式软件开发的必备知识

    嵌入式软件开发作为计算机科学和电子工程的交叉领域,要求开发人员具备一系列的专业知识和技能。 而基于CW32的嵌入式软件开发必备知识包括以下
    发表于 11-28 07:48

    为什么单片机中很少使用malloc,而PC程序频繁使用呢?

    来进行内存管理,尤其是在处理复杂数据结构和应用时。 开发的复杂度单片机:在嵌入式开发中,开发者往往需要在有限的资源和对实时性的严格要求下设计和调试系统。
    发表于 11-20 06:55

    嵌入式软件测试与专业测试工具的必要性深度解析

    嵌入式系统作为控制、监视或辅助装置运行的专用计算机系统,其软件测试面临着独特的挑战和严格的要求。专业测试工具在嵌入式软件开发过程中发挥着不可替代的作用,是确保系统可靠性和安全性的关键保
    发表于 09-28 17:42

    嵌入式达到什么水平才能就业?

    工具定位问题具备嵌入式软件模块化设计能力:能按功能划分代码模块,编写规范的头文件与源文件,实现模块间低耦合调用会使用Git 进行版本管理:能提交代码、解决冲突、回滚版本,熟悉敏捷开发流程中需求拆解与任务
    发表于 09-15 10:20

    2025“芯原杯”全国嵌入式软件开发大赛圆满落幕

    此前,2025年7月20日至26日,第四届“芯原杯”全国嵌入式软件开发大赛决赛在海口成功举办。
    的头像 发表于 08-06 09:51 1108次阅读

    嵌入式软件开发常用的软件有哪些?

    对于初学嵌入式的朋友们,会想要了解嵌入式软件开发常用的软件有些,有什么用。那么看以下常用的软件介绍。 1.Visual Studio Cod
    发表于 07-03 17:06

    如何成为一名嵌入式软件工程师?

    、Java等)和软件开发工具,还需要对硬件的工作原理有深入的理解。 在团队中,嵌入式软件工程师往往扮演着核心角色,他们的工作直接关系到产品的性能、稳定性和用户体验。 02掌握核心技能与知识
    发表于 04-15 14:37

    如何使用LAX_CODEGEN启用动态内存分配

    我目前正在探索NXP_MBDToolbox_LAX。lax_codegen 生成的代码基于静态分配。我想管理大型向量,如何使用 LAX_CODEGEN 启用动态内存分配
    发表于 04-10 08:09

    嵌入式系统开发圣经【干货】

    内容包括:嵌入式系统的介绍、嵌入式SoC硬件系统概论、嵌入式系统软件开发。适用于产品主管、系统设计分析人员及欲进入该领域的工程师。本资料详细的理论讲解,广泛深入地分析相关的
    发表于 03-12 13:58

    IAR发布云端平台,助力现代嵌入式软件开发团队

    该平台为嵌入式软件开发人员提供前所未有的自由度与灵活性,助力开发团队在工具选择和日常工作流中实现更高效的协作与创新。
    的头像 发表于 03-12 11:56 611次阅读

    嵌入式软件工程师就业好不好?

    、智能医疗设备等,都离不开嵌入式软件的支持。预计2025年,物联网设备的数量将呈爆发式增长,这将为嵌入式软件开发工程师带来大量的就业机会。 薪资待遇具有竞争力 由于
    发表于 02-20 10:19

    打破技术壁垒!AWFlow让嵌入式软件开发触手可及

    嵌入式软件开发中,创意和技术创新常常难以融合。AWFlow通过其图形化组态方法,利用拖拽节点构建业务流程图,帮助用户实现奇思妙想。在嵌入式软件开发中,创意和技术创新常常难以融合。一方
    的头像 发表于 02-10 16:44 704次阅读
    打破技术壁垒!AWFlow让<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>触手可及

    嵌入式机器学习的应用特性与软件开发环境

    设备和智能传感器)上,这些设备通常具有有限的计算能力、存储空间和功耗。本文将您介绍嵌入式机器学习的应用特性,以及常见的机器学习开发软件开发环境。 嵌入式机器学习的应用特性与优势 由于
    的头像 发表于 01-25 17:05 1211次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与<b class='flag-5'>软件开发</b>环境

    嵌入式软件开发符合ISO 26262 功能安全标准

    )的符合性呢?现在,您可以通过 “如何遵守 ISO 26262 标准 ”白皮书在 ISO 26262 合规性方面抢占先机。了解如何以最佳方式加快嵌入式软件开发符合
    发表于 01-15 12:04 3次下载

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    系统开发与硬件关系的几个关键点: 硬件依赖性 :嵌入式系统的软件必须能够在特定的硬件上运行,这包括处理器、内存、输入/输出接口等。软件必须能
    的头像 发表于 12-09 09:38 1469次阅读