我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.
这是否特定于编译器使用?
对于这个,malloc/new和free/delete的工作方式是否相同?
它是特定于平台的吗?
它会出现在其他操作系统上,例如Linux或VxWorks吗?
我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.
你能举一个关于这个初始化如何有用的实际例子吗?
我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.
这有多便携?
我刚刚发现 C 编译器有非常奇怪的行为。这是非常简单的代码。我在很多在线C编译器中尝试过,但结果总是一样的,这让我抓狂。
#include <stdio.h>
int main()
{
char Buffer[10] = "0123456789";
char ID[5] = "abcde";
printf("%s",ID);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
花点时间尝试预测函数的结果printf。如果你是像我一样的人,那么我认为最明显的解决方案是“abcde”,这是不正确的!但如果你以某种方式算出了“abcde0123456789”,那么你就在消耗电力来生活。
怎么、怎么可能?我只选择ID要打印的数组,那么为什么Buffer也用它打印呢?这没有道理。即使ID数组也不够大,无法容纳所有数据。我真的要失去理智了。