「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Visual Studio の std::vector の Operator[] はリリース ビルドで境界チェックを実行しますか?

Visual Studio の std::vector の Operator[] はリリース ビルドで境界チェックを実行しますか?

2024 年 11 月 10 日に公開
ブラウズ:179

Does std::vector\'s operator[] in Visual Studio Perform Bounds Checking in Release Builds?

Visual Studio での std::vector の Operator[] の境界チェック動作

Visual Studio 2008 では、std::vector の Operator[]デフォルトで境界チェック動作を示します。これは、operator[] を使用してベクトルの定義範囲外の要素にアクセスすると、std::out_of_range 例外が発生することを意味します。ただし、この動作はデバッグ ビルドとリリース ビルドの両方でデフォルトで有効になっています。

投稿者は、パフォーマンスを最適化するためにリリース ビルドでの境界チェックを無効にすることに関心を示しました。幸いなことに、Visual Studio 2010 では、リリース ビルドでは境界チェックを無効にし、デバッグ ビルドでは境界チェックをデフォルトで維持することで、この問題に対処する予定です。

この変更は、設定できるマクロ _ITERATOR_DEBUG_LEVEL (以前の _SECURE_SCL) によって制御されます。境界チェックを無効にするには 0 に設定します。これにより、開発者は、デバッグ ビルドでは Operator[] の境界チェックを選択的に有効にし、リリース ビルドではそれを抑制してパフォーマンスを向上させることができます。

この変更を実装することにより、Visual Studio 2010 では、std の境界チェック動作をより柔軟に管理できるようになります。 ::vector の演算子[]。開発者は、特定のアプリケーション要件に基づいて、精度 (すべてのビルドで境界チェックを使用) またはパフォーマンス (リリース ビルドで境界チェックを無効に) を優先することを選択できるようになりました。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3