gpt4 book ai didi

c - 多进程操作系统中的垃圾值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:05 25 4
gpt4 key购买 nike

自操作系统 session 开始以来,分配的内存是否保存垃圾值?在我们将其命名为程序运行时 session 中的垃圾值之前,它是否有一些意义?如果是,那为什么?

我需要一些有关 linux 内核编程、设备驱动程序编程的学习 Material 的建议,并且还想了解计算机设备的实际工作原理。我陷入了“垃圾值”之类的情况,觉得我还必须学习其他东西才能更好地理解编程语言。我正在自学,遇到很多困惑的情况。任何建议都会很有帮助。

最佳答案

“垃圾值(value)”是一个俚语,意思是“我不知道那里有什么值(value),或者为什么,因此我不会使用这个值(value)”。是“无用的废话”意义上的“垃圾”,有时也是“别人留下的”意义上的“垃圾”。

形式上,C 中未初始化的内存采用“不确定值”。这可能是 C 实现写入的一些特殊值,或者它可能是同一内存的早期用户“遗留下来”的东西。例如:

  • C 运行时的调试版本可能会用一个引人注目的值填充新分配的内存,因此如果您在调试器中看到它而您期待自己存储的数据,您可以合理地得出结论,要么您忘记了初始化它,否则您找错地方了。
  • “适当”操作系统的内核会在首次将内存分配给进程时覆盖内存,以避免一个进程看到“属于”另一个进程的数据,并且出于安全原因不应跨进程边界泄漏这些数据。通常它会用一些已知值覆盖它,例如 0。
  • 如果您malloc 内存,在其中写入一些东西,然后释放 它和malloc 一些更多的内存,您可能会再次获得相同的内存其先前的内容基本完好无损。但是从形式上讲,您新分配的缓冲区仍然是“未初始化的”,即使它恰好与您释放它时具有相同的内容,因为从形式上讲,它是一个全新的字符数组,恰好与旧字符具有相同的地址。

在 C 中不使用“不确定值”的一个原因是标准允许它成为“陷阱表示”。当您将某些类型的某些不可能的值加载到寄存器中时,某些机器会注意到,并且您会遇到硬件故障。因此,如果内存以前用于,比方说,一个 int,但随后该值被读取为一个 float,谁说剩下的位模式是否代表一个所谓的“信号 NaN”,会停止程序?如果您将值作为指针读取并且它与类型未对齐,则可能会发生同样的情况。甚至整数类型也允许具有“奇偶校验位”,这意味着将垃圾值读取为 int 可能具有未定义的行为。在实践中,我不认为任何实现实际上都有 int 的陷阱表示,而且我怀疑如果您只是读取指针值,任何实现都会检查未对齐的指针——尽管如果你取消引用它。但是 C 程序员如果不谨慎的话就什么都不是。

关于c - 多进程操作系统中的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com