首页  >  文章  >  后端开发  >  与较新的编译器相比,VC6 中 C 的内存分配有何不同?

与较新的编译器相比,VC6 中 C 的内存分配有何不同?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-17 11:03:01886浏览

How Does Memory Allocation in C   Differ in VC6 Compared to Newer Compilers?

C 中的新分配

在 C 中,当 new 运算符分配内存失败时,会引发 std::bad_alloc 异常。然而,据报道,某些编译器(例如 VC6)偏离了此标准。

VC6 行为

VC6 不遵守 C 标准,而是返回 0(或 NULL) )当内存分配失败时。这种不符合性可能会导致代码看起来不整洁,因为在每个新语句后都需要不断检查 NULL。

解决方案

Microsoft 在知识库中承认了此问题基础文章 KB276944。为了在 VC6 中解决这个问题,MSVC 允许链接自定义的新处理程序。在较新的 MSVC 编译器(7.0 及更高版本)中,与 nothrownew.obj 对象文件的链接提供与 VC6 相同的行为。

VS2005 及以上

MSVC 8.0 (VS2005 )引入了一项更改,默认情况下 new 现在一致引发 std::bad_alloc 。仍然可以使用 std::nothrow 参数指定返回 0 的选项,如提供的代码示例中所示。这是一个向后兼容的解决方案,允许代码与任何编译器版本一起使用。

以上是与较新的编译器相比,VC6 中 C 的内存分配有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn