uninitiliazed变量如何获得垃圾值?

Pal*_*Dot 10 c compiler-construction variables programming-languages initialization

当我们创建一个变量并且不对其进行初始化时,会为其分配一些称为垃圾值的(随机)数字.

  • 如何将此值分配给变量?
  • 这背后的整体概念/机制是什么?
  • 这只发生在C吗?

Dav*_*vid 27

垃圾值未分配,而值已经存在.当您分配一个变量时,您需要保留一块内存 - 直到您覆盖它为止,该内存将包含之前的任何"随机"信息.

作为一个比喻,考虑分配一个变量,比如购买一块土地 - 直到你用它做一些事情(比如盖房子),土地就会有任何已经存在的垃圾(就像一个破旧的房子).

有些语言会自动用零填充新分配的变量 - 这需要时间.在像C这样的"自己动手"的语言中,这种额外的行为并不是保证的(尽管在某些系统中,无论语言如何,都会清除内存,例如作为安全措施)


fbr*_*eto 6

内存在应用程序的各个点使用和重用.例如,随着应用程序的调用堆栈的增长和缩小,内存中的相同位置可能会被覆盖很多次.要记住的是,当一块内存被放弃时,它不会被清零,所以如果你再次使用它时没有为内存中的那个地方指定一个新的初始值,你将获得旧的"垃圾"值.

一些语言结构实现在使用时默认初始化内存.其他人则不这样做,因此仔细阅读您的语言文档以了解预期结果非常重要.