2つの整数を乗算するなどの数学演算を実行した後、C++でCPUのオーバーフローフラグレジスタにアクセスすることは可能ですか?オーバーフローをチェックする他の高速方法は何ですか?C++でCPUのオーバーフローフラグレジスタにアクセスすることはできますか?
答えて
いいえ、一般的に不可能です。いくつかのCPUは、そのようなフラグ(例えば、MIPS)も有していない。
コメントの1つに記載されているlinkは、オーバーフローチェックの仕方に関するアイディアを提供します。
CおよびC++符号付き整数オーバーフローでは、未定義の動作が発生し、事実の後では合法的にオーバーフローチェックを実行できないことに注意してください。符号なし算術を使用するか、算術演算の前にチェックを行う必要があります。
私はすべての適切なケースでこの読書をお勧めします。 Optimizing software in C++ -
整数オーバーフローがセキュリティ上の別の問題です。公式のC標準 は、オーバーフローの場合の符号付き整数の振る舞いは "未定義"であると言います。これにより、コンパイラはオーバフローを無視したり、 が発生しないと想定します。 Gnuコンパイラの場合、符号付き整数オーバーフローが発生しないと仮定した は残念ながら という結果になり、コンパイラはオーバーフローを最適化して のチェックを行うことができます。 (1)オーバーフローが発生する前にチェックする、(2)符号なし整数を使用する - ラップアラウンドが保証されている、(3) オプション
-ftrapv
でトラップ整数オーバフローが発生する可能性があります。 (4)オプション-Wstrict-overflow=2
でコンパイラ を警告するか、(5)オプション-fwrapv
または-fno-strict-overflow
でオーバーフロー動作を明確に定義します。
これは二つの理由のために何をしたいのか、おそらくではありません。
- ないすべてのCPUが
人が前に投稿したオーバーフローチェックのヒントが役立つかもしれません。
2つの整数を乗算してオーバーフローフラグをチェックする高速なコードを本当に書きたい場合は、アセンブリを使用する必要があります。 x86の例が必要な場合は、
- 1. は、OpenGL ESは、CPUのメモリにレンダリングすることができますか?
- 2. S60デバイスのシステムエラーログにアクセスすることはできますか?
- 3. C#では、なぜこのストリームにアクセスできませんか?
- 4. テンソルフローテンソルの形にアクセスすることはできませんか?
- 5. GolangでCPUキャッシュを使用することはできますか?
- 6. どのようにCPUを少なくすることができますか?
- 7. &で置き換えることはできますか? C++で
- 8. iPhoneアプリケーションでFacebookのステータス履歴にアクセスすることはできますか?
- 9. control-Cを無効にすることはできますか?
- 10. C++クラスの属性として__m128変数の内部値にアクセスすることはできますか?
- 11. 一度に1つのCPUのみRAMにアクセスできますか?
- 12. CPUの熱センサーにアクセスするには?
- 13. awsはyourdomain.comにアクセスできますが、http://www.yourdomain.comにアクセスすることはできません。
- 14. コンテナテンプレートクラスをC++で抽出することはできますか?
- 15. CプログラムでCLRをホストすることはできますか?
- 16. C#でカスタムコンパイラエラーを強制することはできますか?
- 17. C#でコンストラクタをオーバーライドすることはできますか?
- 18. C#でイベントサブスクリプションを購読することはできますか?
- 19. 私は外部からC++でプライベートメソッドにアクセスできますか?
- 20. CoffeeScriptのクラスメインJavaScriptでアクセスすることはできません
- 21. xcodeで辞書にアクセスすることができます
- 22. twigテンプレートのRouteパラメータに直接アクセスすることはできますか?
- 23. getとsetを使用するとC#の変数にアクセスできますか?
- 24. は、別のクラスからメソッドにアクセスすることはできません - VB
- 25. C#またはJavaでサブクラス化するときにプライベートメンバーをオーバーライドすることはできますか?
- 26. しばらくしてからIIS Webサイトにアクセスすることはできませんが、サーバーにアクセスすることができます
- 27. C#からasp.Netにアプリケーションをオンラインでホストすることはできますか?
- 28. C#のようにSwiftで型をチェックすることはできますか?
- 29. C++のfor-loopで動的にインクリメントすることはできますか?
- 30. ポストバック後にオブジェクトにアクセスすることができます - ASP.NET
を確認してください。これを確認してください。http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-cc – acrilige
@acrilige thanks、その私の質問の2番目の部分、計算を実行した後のオーバーフローをチェックする方法についての任意のアイデアに答えますか? –
オーバーフローフラグレジスタに直接アクセスすることは、標準的な移植可能な方法では不可能です。しかし、作業が少しだけオーバーフローするかどうかを判断することができ、これをチェックしたり、オーバーフローを非標準の非移植可能な方法で検出する方法があります。 –