首頁  >  文章  >  後端開發  >  與較新的編譯器相比,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