代码之家  ›  专栏  ›  技术社区  ›  LeopardSkinPillBoxHat

编译器何时以及为什么在malloc/free/new/delete上将内存初始化为0xCD、0xDD等?

  •  150
  • LeopardSkinPillBoxHat  · 技术社区  · 16 年前

    我知道编译器有时会用某些模式初始化内存,例如 0xCD 0xDD 我想知道的是 什么时候 为什么? 这种情况会发生。

    什么时候

    这是特定于所使用的编译器的吗?

    malloc/new free/delete 在这方面以同样的方式工作?

    它是特定于平台的吗?

    它会在其他操作系统上发生吗,例如 Linux VxWorks ?

    为什么?

    我的理解是,这只发生在 Win32 调试配置,它用于检测内存溢出并帮助编译器捕获异常。

    你能举一些实际的例子来说明这种初始化是如何有用的吗?

    我记得读过一篇文章(可能是在《代码大全2》中)说,在分配内存时,最好将内存初始化为已知模式,某些模式会触发中断 Win32系统 这将导致调试器中显示异常。

    这有多便携?

    8 回复  |  直到 5 年前