首页 > 解决方案 > 编译器在 c 中分配垃圾值的贡献

问题描述

我们可以说当垃圾值被分配给 C 中的变量时,它们与之前在编译器上执行的程序有关吗?像以前程序的一些值被编译器保留然后以垃圾的形式分配给未分配的变量?例如 - 如果在前面的程序中我们得到一个值 78。那么在任何下面的程序中是否有可能在任何分配的变量中我们看到该值或从任何以前的程序中检索到的任何其他值?

标签: cvariablescompiler-errorscompiler-constructiongarbage

解决方案


尽管一切皆有可能,但由于语言规范并没有禁止它,所以这是极不可能的。

出于安全原因,操作系统通常会确保新进程不会从以前的进程中接收任何内存内容。因此,每个编译器进程都从新内存开始。

编译器本身在调用之间保存数据是非常不正当的。没有理由这样做,并且需要额外的工作来保存和检索它。

当变量未初始化时,没有代码故意将“垃圾”放入其中(除非您使用valgrind的软件旨在检测未初始化数据的使用)。分配给它的内存地址,它只是使用该内存中发生的任何内容。对于堆栈上的变量,这可能是从先前函数调用的堆栈帧中遗留下来的数据,或者在早期计算中使用的临时数据等。

但是这些都不可能来自编译器本身。


推荐阅读