对于 32 位系统(无论是 Linux、Mac OS或 Windows,PowerPC
还是 x86)的 C++ 开发,我已经初始化了原本未定义的指针(例如,它们不能立即获得正确的值),如下所示:
int *pInt = reinterpret_cast<int *>(0xDEADBEEF);
(为了节省打字和干燥,右手边通常是一个常数,例如 BAD_PTR。)
如果 pInt 在获得正确值之前被取消引用,那么它将在大多数系统上立即崩溃(而不是在某些内存被覆盖或进入非常长的循环时崩溃很久)。
当然,行为取决于底层硬件(从用户进程的奇数地址 0xDEADBEEF 获取 4 字节整数可能是完全有效的),但是对于我迄今为止开发的所有系统,崩溃都是 100% 可靠的( Mac OS 68xxx、Mac OS PowerPC、Linux Redhat Pentium、Windows GUI Pentium、Windows 控制台 Pentium)。例如,在 PowerPC 上,从奇数地址获取 4 字节整数是非法的(总线故障)。
在 64 位系统上这有什么好的价值?