通过确定性,我隐约意味着可以用于航空航天飞行软件等关键实时软件.垃圾收集器(以及动态内存分配)在飞行软件中是很大的禁忌,因为它们被认为是非确定性的.但是,我知道正在对此进行研究,所以我想知道这个问题是否已经解决了.
我还在问题中包括任何垃圾收集算法,这些算法限制了它们的使用方式.
malloc不保证返回0的内存.传统观点不仅如此,而且内存malloc返回的内容实际上是非确定性的,例如openssl将它们用于额外的随机性.
但是,据我所知,malloc建立在brk/sbrk之上,它可以"返回"0'ed内存.我可以看到为什么malloc返回的内容可能不是0,例如来自以前的免费内存,但为什么它们在"普通"单线程软件中是非确定性的呢?
编辑几个人回答解释为什么内存可以是非0,我已在上面的问题中解释过.我问的是为什么使用malloc返回的内容的程序可能是非确定性的,也就是为什么它每次运行时都会有不同的行为(假设相同的二进制文件和库).非0表示非确定性行为.换句话说:为什么每次运行二进制文件时它都有不同的内容.
如果禁用地址空间布局随机化(ASLR),我们是否会有确定性的mmap?通过确定性,我的意思是如果我使用相同的输入一次又一次地运行相同的应用程序,我将获得mmap返回的相同地址吗?我最感兴趣的是匿名mmaps.
假设我有一个应用程序的两个实例,它们具有相同的输入和相同的执行顺序。因此,作为一种错误检测机制,一个实例是一个冗余实例,用于与另一个实例比较内存中的数据。
现在,我希望所有内存分配和释放在两个进程中以完全相同的方式发生。最简单的方法是什么?写我自己的malloc和免费的吗?那么分配给其他功能(例如mmap)的内存又如何呢?