ほとんどのソフトウェアは、32ビットと64ビットの両方のIntel / AMDアーキテクチャ用にコンパイルされた場合、同じように動作します。ただし、一部のソフトウェアはサポートしません。怠lazや、より多くの聴衆にリーチすることは別として、64ビットとして再コンパイルできない理由はいくつかあります。
ソフトウェアは安全でないポインタ操作を使用する場合があります。おそらく、プログラムはintにポインターを置きます。intは通常、ほとんどのCおよびC ++コンパイラーでは32ビットです。ポインターは、64ビットプログラムの64ビットです。それは機能しません。
使用されている整数型が異なるサイズである場合、ビットシフト演算は異なる結果を生成する場合があります。これは、次のような標準のtypedefの代わりに通常のデータ型を使用する場合に問題になる可能性がありますint32_t
ユニオンで使用されるデータ型はサイズを変更し、ユニオンの動作を変更する場合があります。
ソフトウェアは、32ビットのみのライブラリに依存する場合があります。一般に、64ビットプログラムは、スタック、ポインターなどに関する仮定のために、64ビットライブラリでのみ動作します。
あなたの質問であなたが尋ねる難しさは、いくつかのコードベースでは、安全でない操作を実行し、安全でない仮定を行い、開発者によって入れられたショートカットと巧妙な「最適化」を持つコードの数百万行があるかもしれないということです。コードは64ビット環境でコンパイルされないか、コンパイルされますが、表示されるバグがあります。すべての問題を修正するのに時間がかかる場合があります。64ビットバージョンをリリースできるようになるまで、会社が時間をかけて修正するかもしれません。全面的な書き換えが必要なため、企業は現在のメンテナンスリリースと一緒に「バージョン2」を開発するかもしれません。
ストーリーの教訓は、きれいなコードを記述し、コンパイラーを推測したり、不要な賢明な最適化を追加したり、ソフトウェアを破壊したり、おそらく助けにはならないことです。
この記事では、この答えに含めることを望んでいたよりもはるかに詳細に説明します。64ビットプラットフォームでのC ++コードの移植に関する20の問題
sizeof(int)==sizeof(void*)