ホームページ  >  記事  >  バックエンド開発  >  C のメモリ割り当ては、新しいコンパイラと比較して VC6 でどのように異なりますか?

C のメモリ割り当ては、新しいコンパイラと比較して VC6 でどのように異なりますか?

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 および Beyond

MSVC 8.0 (VS2005) と同じ動作が提供されます。 ) new がデフォルトで一貫して std::bad_alloc を発生させる変更が導入されました。提供されているコード例に示すように、0 を返すオプションは std::nothrow パラメーターを使用して指定できます。これは、コードがどのコンパイラ バージョンでも動作できるようにする下位互換性のあるソリューションです。

以上がC のメモリ割り当ては、新しいコンパイラと比較して VC6 でどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。