![]() |
1
7
对于关键软件,您希望您的系统具有尽可能确定的行为。 动态内存、内存碎片、可能的泄漏,以及在某些情况下(不太罕见)malloc的错误行为,将使获得100%确定性变得更加困难。 证明 您的内存分配和取消分配(空闲)将是确定性的(请参阅RickNZ的宝贵说明),那么您就更接近于拥有确定性系统。 |
![]() |
2
8
如果你正在编写这种软件,你应该有一本关于你所遵守的规范的大书(FAA、NATO、FDA等等),说明你能做什么和不能做什么,它会告诉你的。 如果出现错误情况,负责重新启动软件(即,看门狗定时器,软件必须每100ms重置一次,以防止硬件重置) |
![]() |
3
4
在“不能失败”类型的应用程序中,当我无法完全避免动态分配时,我使用的一种方法是,在应用程序首次启动时,只分配一次所需的缓冲区和其他数据结构,因此它们永远不需要被释放。循环和释放/删除与新闻/分配不一致,这往往会导致问题。。。 当这还不够的时候,我使用的另一个技巧是使用我自己的自定义版本malloc和free运行,代码会特别注意检查常见的错误情况,比如释放已经释放的内容,定期验证freelist指针的完整性,查看总内存使用是否随着时间的推移而增加,等等。 |
![]() |
4
3
我所研究过的所有交易系统和其他银行软件都大量使用动态分配,它们对于使用它们的IBs来说是至关重要的。我更喜欢避免在对生命至关重要的系统上工作,所以不能为它们说话。 |
![]() |
5
0
我是C++新手; 但既然一切都在记忆中;你会用它的。 所以程序员为什么要避免它?
|
![]() |
6
0
最好避免。随着时间的推移,系统中最小的内存泄漏将导致系统崩溃。例如,像汽车和飞机这样的生命关键系统不使用动态分配。 |
![]() |
7
0
我觉得你完全可以在任务关键型应用程序、MC应用程序中使用动态内存分配,它们不一定是RT应用程序,它们只是意味着它们对业务运作至关重要。当使用动态内存分配结构时,总是必须进行大型压力测试,这可能会显示内存泄漏,当模拟真实的客户环境时,这样您才能理解动态内存分配的影响,因为它有一个。 |
![]() |
8
0
从传感器读取数据和从其他来源获取实时数据时,不使用动态存储器。许多应用程序使用队列并仅保留当前数据。
|
![]() |
9
0
我认为,如果没有动态内存分配,编写任何合理的大型系统都是非常困难的。
但是默认的内存管理是一个通用内存管理器,只有非常有限的保证。
|
![]() |
10
0
当然,这没有问题。但是:分配失败不应导致程序失败。
这一原则扩展到实时程序。实时
|
![]() |
11
-4
嗯,你不能避免动态分配。不知何故,在某个地方,您的堆栈至少必须得到分配。通常,当人们开始过分担心某样东西是在堆栈上还是堆上时,这表明他们变得有点滑稽。与堆相关的错误一样,可以有多个或多个与堆栈相关的错误,但在测试中,只要避免使用自己内存管理的lib,就可以很容易地捕获与堆相关的错误。但是,C++最初并不是这种应用程序的最佳语言。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |