Ole*_*828 8 c malloc non-deterministic linux-kernel
malloc不保证返回0的内存.传统观点不仅如此,而且内存malloc返回的内容实际上是非确定性的,例如openssl将它们用于额外的随机性.
但是,据我所知,malloc建立在brk/sbrk之上,它可以"返回"0'ed内存.我可以看到为什么malloc返回的内容可能不是0,例如来自以前的免费内存,但为什么它们在"普通"单线程软件中是非确定性的呢?
编辑几个人回答解释为什么内存可以是非0,我已在上面的问题中解释过.我问的是为什么使用malloc返回的内容的程序可能是非确定性的,也就是为什么它每次运行时都会有不同的行为(假设相同的二进制文件和库).非0表示非确定性行为.换句话说:为什么每次运行二进制文件时它都有不同的内容.
Meh*_*dad 11
Malloc不保证不可预测性......它只是不能保证可预测性.
例如,考虑一下
return 0;
Run Code Online (Sandbox Code Playgroud)
是malloc的有效实现.
我认为它是非确定性的假设是完全错误的,特别是当您要求非线程上下文时。(在线程上下文中,由于调度 alea,您可能会有一些不确定性)。
试试吧。创建一个连续的、确定性的应用程序
运行该程序两次并将结果注册到两个不同的文件中。我的想法是这些文件将是相同的。