编译器在c

问题描述

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

解决方法

虽然一切皆有可能,但由于语言规范并未禁止这样做,所以这种可能性极小。

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

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

未初始化变量时,没有代码会故意在其中放入“垃圾”(除非您使用的是valgrind之类的旨在检测未初始化数据使用的软件)。分配了一个内存地址,并且它仅使用该内存中的任何内容。对于堆栈上的变量,这可能是上一个函数调用的堆栈帧中剩余的数据,或者是早期计算中使用的临时数据,等等。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...