嵌入式应用程序中的内存管理资源

2023-11-23

我应该如何管理任务关键型嵌入式应用程序中的内存?

我通过谷歌找到了一些文章,但无法找到真正有用的实用指南。

The DO-178b禁止动态内存分配,但是如何管理内存呢?提前预分配所有内容并向每个需要分配的函数发送一个指针?分配到栈上?使用全局静态分配器(但它与动态分配非常相似)?

例如,答案可以采用常规答案、资源引用或优秀开源嵌入式系统引用的形式。

澄清:这里的问题不在于嵌入式系统是否可以使用内存管理。但对于嵌入式系统来说,什么才是好的设计,才能最大限度地提高可靠性。

我不明白为什么静态预分配缓冲池并动态获取和删除它与动态分配内存不同。


我曾在 DO-178B 环境(飞机系统)中工作。据我了解,不允许动态分配的主要原因主要是认证。认证是通过测试(单一、覆盖、集成……)完成的。通过这些测试,您必须证明程序的行为是 100% 可预测的,几乎可以达到进程的内存占用量从一次执行到下一次执行都是相同的程度。由于动态分配是在堆上完成的(并且可能会失败),因此您无法轻易证明这一点(我想如果您掌握从硬件到编写的任何代码段的所有工具,这应该是可能的,但是......)。静态分配不会有这个问题。这也是当时在这样的环境中不使用 C++ 的原因。 (大约15年前,可能已经改变了......)

实际上,您必须编写大量结构池和分配函数来保证您具有确定性。你可以想象很多解决方案。关键是您必须(通过大量测试)证明高水平的确定性行为。证明您手工开发的确定性工作比证明 linux + gcc 在分配内存方面是确定性的更容易。

只是我的2分钱。这是很久以前的事了,事情可能已经发生了变化,但对于像 DO-178B 这样的认证,关键是要证明您的应用程序在任何情况下都可以在任何时候正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式应用程序中的内存管理资源 的相关文章

  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过

随机推荐

  • 将正则表达式选项传递给 PowerShell [regex] 类型

    我使用下面的正则表达式代码捕获两个匹配的组 regex regex 0 9 1 20 b kb mb gb tb matches regex match minSize size int64 matches Groups 1 Value u
  • 在 Android 上使用 addJavascriptInterface() 传递 JavaScript 对象

    是否可以使用 addJavascriptInterface 将 JavaScript 对象从 JavaScript 传递到 Java 沿着这些思路 var javaScriptObject field1 string1 field2 str
  • 十六进制值 0x0B,是 XML 中的无效字符问题

    我遇到异常 十六进制值 0x0B 是无效字符 第 23 行 第 22 号位置 我已经尝试过解决方案Here 但它对我不起作用 由于我的项目是在3 5版本 我无法使用XmlConvert IsXmlChar method MSDN 怎么处理呢
  • 我可以使用一个 HTML5 应用程序控制两个浏览器窗口吗?

    我希望我的 HTML5 应用程序能够绘制到两个不同的屏幕上 这 我认为 意味着我需要有两个不同的浏览器窗口 每个屏幕上一个 这可能吗 看来我真的必须将相同的应用程序加载到两个窗口中 并以某种方式让窗口相互通信 我找不到如何实现此目的的示例
  • 使用 FTPS 将文件从 Android 传输到服务器 [重复]

    这个问题在这里已经有答案了 我正在使用Apache Commons FTP 库在我的 Android 应用程序中 我通过 FTPS 建立连接 虽然它可以完美地连接到服务器 但在传输文件时遇到问题 出于安全原因 订购应用程序的客户端要求在使用
  • 实体框架 PostgreSQL

    有人可以告诉我如何让 MS Entity Framework 与 PostgreSQL 一起使用吗 另外 实体框架如何与 Mono 一起工作 您能否推荐其他类似的可在 Mono 上运行的 ORM 工具 您对它们有何看法 实体框架还可以与 N
  • 为什么要使用 !!操作员

    我在一个例子中遇到了一些红宝石 def role role return self roles find by name role to s camelize end 你为什么会使用 难道不一样吗 return self roles fin
  • 使用故事板时如何子类化导航控制器?

    我使用 Xcode 菜单 编辑器 嵌入 导航控制器 在界面生成器中使用故事板 看来在 iOS 6 中你必须子类化 UINavigationController 以允许所有方向 NSUInteger supportedInterfaceOri
  • 列出 PostgreSQL 中带有索引的列

    我想获取 PostgreSQL 中索引所在的列 在 MySQL 中你可以使用SHOW INDEXES FOR table并看看Column name柱子 mysql gt show indexes from foos Table Non u
  • 对 SQLAlchemy 中每个查询的所有表应用全局过滤器

    我们正在尝试设置一个 SaaS 服务 支持共享数据库和架构中的多租户 我们计划在所有表上都有一个tenant id 列 我想做的是 开发人员不必编写任何额外的代码 我的查询就可以按此租户 ID 自动过滤所有涉及的表 在 SQL Alchem
  • 在 Java 中可靠地播放短声音

    我正在努力编写一些基本上只播放短 wav 文件的 Java 代码 短 是指不到一秒的时间 对于使用 Ubuntu 的用户 我使用的文件位于 usr share sounds generic wav 问题是 我似乎不知道如何播放该样本reli
  • 带有 WHERE 子句的 PostgreSQL 更新插入

    我正在尝试将 Oracle 合并查询迁移到 PostgreSql 如中所述this文章中 Postgres UPSERT 语法支持 where 子句 来识别冲突条件 不幸的是 该网页没有提供带有 where 子句 的示例 我尝试在其他地方寻
  • pytest 的 PATH 问题“ImportError:没有名为 ...”的模块

    I used 简易安装安装pytest在 Mac 上并开始为具有如下文件结构的项目编写测试 repo app py settings py models py tests test app py Run py test当在repo目录 一切
  • 实体框架子查询

    伙计们 我是实体框架的新手 我遇到了一个问题 我已经尝试解决很长一段时间了 基本上我有 4 个实体 用户 组 书籍和阅读列表 用户可以加入一个组 并且组包含书籍 由 ReadingList 定义 我正在尝试显示特定组的书籍列表 SQL 如下
  • 在 matplotlib 中将 x 和 y 数据作为关键字参数传递?

    或者 为什么不 import numpy import matplotlib pyplot as plt plt plot xdata numpy array 1 ydata numpy array 1 color red marker o
  • 在 Android 中创建短信应用程序?

    我正在创建一个短信应用程序来发送和接收短信 我可以使用以下代码发送短信 SmsManager sms SmsManager getDefault sms sendTextMessage phoneNumber null message pi
  • 如何从范围中获取随机数,排除某些值

    在 C 中 如何从一系列值 例如 1 100 中获取随机数 但该数字不应该位于某些特定值列表中 例如 5 7 17 23 由于没有人发布任何示例代码 private int GiveMeANumber var exclude new Has
  • 关系数据库中的空值可以吗? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 有一种观点认为关系数据库中不应允许空值 也就是说 表的属性 列 不应允许空值 来自软件开发背景的我真的不明白这一点 似乎如果 null 在属性的上下文中有效 那么就应该允许它 这在 J
  • Python PEP479 更改生成器内部的 StopIteration 处理

    有人可以帮助我了解 PEP479 的含义吗 我正在阅读文档 但无法理解它 摘要说 此 PEP 提议对生成器进行更改 当在生成器内引发 StopIteration 时 它会被替换为 RuntimeError 更准确地说 当异常即将从生成器的堆
  • 嵌入式应用程序中的内存管理资源

    我应该如何管理任务关键型嵌入式应用程序中的内存 我通过谷歌找到了一些文章 但无法找到真正有用的实用指南 The DO 178b禁止动态内存分配 但是如何管理内存呢 提前预分配所有内容并向每个需要分配的函数发送一个指针 分配到栈上 使用全局静