编译器在 c 中分配垃圾值的贡献
Compiler contribution in assigning garbage values in c
能不能说在C语言中给变量赋垃圾值的时候,跟编译器之前执行的程序有关?
就像编译器保留以前程序的某些值,然后以垃圾的形式分配给未分配的变量?
例如 - 如果在之前的程序中我们得到一个值 78。那么在任何后续程序中,我们是否有可能在任何分配的变量中看到该值或从任何之前的程序中检索到的任何其他值?
尽管一切皆有可能,但由于语言规范并未禁止,所以这种可能性极小。
出于安全原因,操作系统通常会确保新进程不会从先前进程接收任何内存内容。所以每个编译器进程都是从新内存开始的。
编译器本身在调用之间保存数据是非常不正常的。没有理由这样做,并且需要额外的工作来保存和检索它。
当变量未初始化时,没有代码会故意将“垃圾”放入其中(除非您使用 valgrind
之类旨在检测未初始化数据使用情况的软件)。分配给它的内存地址,它只使用该内存中的任何内容。对于堆栈上的变量,这可能是前一个函数调用的堆栈帧遗留下来的数据,或者是早期计算中使用的临时数据,等等。
但其中 none 可能来自编译器本身。
能不能说在C语言中给变量赋垃圾值的时候,跟编译器之前执行的程序有关? 就像编译器保留以前程序的某些值,然后以垃圾的形式分配给未分配的变量? 例如 - 如果在之前的程序中我们得到一个值 78。那么在任何后续程序中,我们是否有可能在任何分配的变量中看到该值或从任何之前的程序中检索到的任何其他值?
尽管一切皆有可能,但由于语言规范并未禁止,所以这种可能性极小。
出于安全原因,操作系统通常会确保新进程不会从先前进程接收任何内存内容。所以每个编译器进程都是从新内存开始的。
编译器本身在调用之间保存数据是非常不正常的。没有理由这样做,并且需要额外的工作来保存和检索它。
当变量未初始化时,没有代码会故意将“垃圾”放入其中(除非您使用 valgrind
之类旨在检测未初始化数据使用情况的软件)。分配给它的内存地址,它只使用该内存中的任何内容。对于堆栈上的变量,这可能是前一个函数调用的堆栈帧遗留下来的数据,或者是早期计算中使用的临时数据,等等。
但其中 none 可能来自编译器本身。