10

80年代の16ビットから32ビットへの移行中は、16intビットまたは32ビットのいずれかでした。現在の64ビット遷移の命名法を使用すると、ILP32およびLP32マシンがかなり均等に普及していることを理解しています。当時、int特定のアーキテクチャでは常にレジスタまたはポインタの幅に従い、long32ビットのままであることが理解されていたと思います。

25年早送りすると、LP64がかなり主流であることがわかりますが、64ビットプラットフォームに遭遇するまで[2007年にデスクトップLinuxを発見しました:)]、私は常にIP64が次の論理的なステップになると期待していました。

  1. これ(LP64)は64ビットで予想される進化でしたか?
    • char <= short <= int <= longこの関係は、私たちが残した各プラットフォームに整数型を固定するというこの新しいスキームにどのように適合しますか?
    • これらの移行スキームは、さまざまなプラットフォームでの(選択した{l,u}caseWORD/の使用とどのように関連していますか?DWORD
    • INTWindowsの一部の領域には、16ビットのフォームがまだ含まれています。WindowsはLLP64から成長しますか、それとも手遅れですか?
    • 32ビット移行中ではなく、なぜint今回取り残されることになったのですか?
4

2 に答える 2

9

私の見方では、Windowsはx64移行全体で奇妙なものです。しかし、それはさておき、CまたはC ++は、整数型を固定長として定義することはありませんでした。このように見ると、//全体が非常に理解しやすいとint思いますlongpointer

  • int:主に32ビット長(Linux、Mac、Windows)
  • long:MacおよびLinuxでは64ビット、Windowsでは32ビット
  • long long:Mac、Linux、およびWindowsx64では64ビット
  • uintptr_t:ポインターの正確な長さ(32ビットの場合は32、64ビットシステムの場合は64)

WORD醜いので、DWORD避けるべきです。APIがそれらを使用するように強制する場合は、処理しているときに置き換えDWORDDWORD_PTRください...まあ、ポインター。そもそも私見で( D)を使うのは決して正しくありませんでした。WORD

Windowsがその決定を変えることはないと思います。すでにトラブルが多すぎます。

なぜint取り残されたのですか?なぜ金星は反対方向に回転するのですか?最初の質問への答えはここにあります(私は信じています)、2番目はもう少し複雑です;)

于 2010-07-24T15:57:51.293 に答える
4

これをint「取り残された」と見なすのではなく、必要となる可能性のあるサイズタイプを取り残せないという観点から見る必要があります。コンパイラーはint32_t内部拡張タイプの観点から定義できると思いますが、C99がまだ広くサポートされていないため、ビルドシステムが32ビットを見つけられなかったときに、__int32_t不足している定義を回避しなければならないのは大きな苦痛でした。int32_t標準タイプの中でタイプします。また、ネイティブワードサイズに関係なく、32ビット型を使用すること不可欠です(たとえば、Unicodeコードポイント値の正しい型は32ビットのみです)。

short同じ理由で、 32ビットと64ビットを作成することは現実的ではありませんint。16ビットタイプは多くのことに不可欠であり、オーディオ処理が最初に思い浮かびます。(Windows / Javaの醜いUTF-16の執着は言うまでもありません。)

実際、16ビットから32ビットへの遷移と32ビットから64ビットへの遷移はまったく比較できないと思います。16ビットを残すことは、通常の日常生活で遭遇するほとんどの数値が基本的なタイプに適合せず、重要なデータセットを処理するために「遠い」ポインタなどのハックを使用する必要があるシステムを残すことでした。一方、ほとんどのアプリケーションでは、64ビットタイプの必要性は最小限です。大きな金額、マルチメディアファイルのサイズ/オフセット、ディスクの位置、ハイエンドデータベース、大きなファイルへのメモリマップアクセスなどが頭に浮かぶ特殊なアプリケーションですが、ワードプロセッサが必要になると考える理由はありません。数十億の文字、またはWebページに数十億のhtml要素が必要になること。

于 2010-07-24T16:38:24.513 に答える