我一直在阅读C语言的编码标准,其中大多数都不鼓励在流行使用中使用动态内存allocation.But (动态内存分配),这是.Any的坚实理由。我在问使用它的原因,尽管它有缺点?以下是我的参考JPL标准:C.pdf 10 :http://spinroot.com/gerard/pdf/P10.pdf的功率
发布于 2014-12-09 07:11:50
动态内存分配通常被禁止在嵌入式系统编程中,特别是在安全关键的嵌入式软件中.所有安全关键软件的行业标准都禁止它:米斯拉-C,DO178B,IEC 61508,ISO 26262等等.
动态内存分配中存在许多众所周知的问题:访问时间缓慢、访问时间可能不确定、memory leaks和heap fragmentation。
这些问题在任何类型的节目中都不受欢迎。但是在PC/桌面等程序设计中,它们被认为是一种必要的邪恶,主要是因为主流的操作系统限制了分配给每个进程的静态进程内存的数量,如果您想要在此之外存储数据,则必须将其存储在堆中。
当数据量直到运行时才知道时,使用动态内存也很方便。然而,在已知的世界中,没有无限内存的计算机,所以“我想使用完全可变的数据量,我不知道有多少”是一种无稽之谈。适当的软件工程师总是为最坏的情况设计。
尤其是在嵌入式系统中,内存数量有限,bug的后果远比弹出内存不足的消息框严重得多,您的程序必须具有100%的确定性行为。你不能设计这样的东西,“这个程序将工作,直到它耗尽内存,然后它将崩溃和烧毁”。您不能允许一个变量"x“的列车数目存在于您的铁路监督系统中,您必须指定上限并在此之后设计系统。
因此,不管上面提到的动态内存的所有问题,您都不想在这类系统中使用动态内存,仅仅因为它没有任何意义。
递归在这些系统中也是被禁止的,原因也差不多一样。
发布于 2014-12-09 00:35:54
C中的动态内存分配处于抽象数学和现实工程之间的模糊线上.数学上,你说,“把这些数据放在某个内存中”,实际上,malloc()
只是给了你“一些内存”,基本上是假装内存是无限的。(事实上,在许多现实世界系统中,由于过度竞争,malloc()
确实从未失败过。)
真正的工程必须面对所有资源的有界性,如果你很清楚地知道你有大量的内存,那么你就必须计划内存的去向。这是更麻烦和更具挑战性的,但它也会导致更好的代码和更好的性能,如果没有其他原因,它迫使您仔细考虑您的程序的数据流。
与malloc()
从未失败过的普通台式机相比,在频谱的另一端,也有一些嵌入式机器没有复杂的内存管理器,而且malloc()
在本质上“总是失败”。如果你没有它就能编程,那么你就可以为这样的平台编程。另一方面,如果您的编程风格总是假定有无限可用的神奇内存,那么您会发现在这样的平台上编程非常困难。
https://stackoverflow.com/questions/27374333
复制