我知道编译器有时会使用某些模式(例如0xCD
和0xDD
)初始化内存。我想知道的是when和why发生这种情况。
这是特定于所使用的编译器吗?
malloc/new
和free/delete
在此方面是否以相同的方式工作?
是否特定于平台?
[在Linux
或VxWorks
等其他操作系统上会发生吗?
我的理解是,这仅在Win32
调试配置中发生,它用于检测内存溢出并帮助编译器捕获异常。
您能提供有关此初始化如何有用的任何实际示例吗?
[我记得读过一些内容(也许在代码完成2中),说在分配内存时将内存初始化为已知模式是很好的,并且某些模式会触发Win32
中的中断,这将导致调试器中显示异常。] >
这有多便携?
我知道编译器有时会使用某些模式(例如0xCD和0xDD)初始化内存。我想知道的是何时以及为什么发生这种情况。什么时候专用于编译器? ...
Microsoft编译器在调试模式下编译时用于各种未拥有/未初始化的内存的简要说明(支持可能会因编译器版本而异:
关于填充值0xCCCCCCCC的一个不错的属性是,在x86汇编中,操作码0xCC是int3操作码,它是软件断点中断。因此,如果您尝试在已填充该填充值的未初始化内存中执行代码,则会立即遇到断点,并且操作系统将允许您附加调试器(或终止进程)。
是特定于编译器和OS的,Visual Studio会将不同类型的内存设置为不同的值,以便在调试器中可以轻松查看是否已将内存分配到已分配的内存,固定数组或未初始化的对象中。我正在搜寻它们时,会有人发布详细信息...
这不是操作系统,而是编译器。您也可以修改行为-请查看此帖子的底部。
这是特定于所使用的编译器吗?