c - 编译器在 c 中分配垃圾值的贡献
问题描述
我们可以说当垃圾值被分配给 C 中的变量时,它们与之前在编译器上执行的程序有关吗?像以前程序的一些值被编译器保留然后以垃圾的形式分配给未分配的变量?例如 - 如果在前面的程序中我们得到一个值 78。那么在任何下面的程序中是否有可能在任何分配的变量中我们看到该值或从任何以前的程序中检索到的任何其他值?
解决方案
尽管一切皆有可能,但由于语言规范并没有禁止它,所以这是极不可能的。
出于安全原因,操作系统通常会确保新进程不会从以前的进程中接收任何内存内容。因此,每个编译器进程都从新内存开始。
编译器本身在调用之间保存数据是非常不正当的。没有理由这样做,并且需要额外的工作来保存和检索它。
当变量未初始化时,没有代码故意将“垃圾”放入其中(除非您使用valgrind
的软件旨在检测未初始化数据的使用)。分配给它的内存地址,它只是使用该内存中发生的任何内容。对于堆栈上的变量,这可能是从先前函数调用的堆栈帧中遗留下来的数据,或者在早期计算中使用的临时数据等。
但是这些都不可能来自编译器本身。
推荐阅读
- python - 不同应用程序之间的表情符号阅读差异
- python - 使用 PIL 在图片上绘制特殊文本
- javascript - 如何将鼠标移动存储在数组中
- presto - 从数组中删除空值
- javascript - 如何在使用材质 UI makeStyles 时默认导出与Router 做出反应
- javascript - 从 html 标签打印属性
- python - 使用 pyMongo 在 Flask 中获取 MongoDB 数据
- r - 如何为每行数据创建单独的 R 降价段落/页面
- docker - Docker 多阶段构建缓存
- laravel - 如何使用 eloquent 和 laravel 使用 softdeletes 创建子查询