16

この回答int*には、「が a より小さいマシン上で」という興味深い記述がありchar*ます。(関数へのポインタを除外しましょう)

異なる型へのポインタが異なるサイズを持つことは可能ですか? なぜこれが役立つのでしょうか?

4

5 に答える 5

14

はい、それは完全に可能です。一部のマシンでは、バイトへのポインタに 2 つの値が含まれます。バイトを含むメモリ ワードの WORD アドレスへのポインタと、ワード内のバイトの位置を示す「バイト インデックス」です。たとえば、32 ビット マシンでは、「バイト インデックス」は 0..3 です。

これには、関連する単語への単なるポインターである「int *」よりも多くの記憶域が必要になります。

于 2013-04-05T11:25:31.820 に答える
6

ワード アドレスのマシンでchar*は、 にパート ワード情報を含める必要がある場合があり、int*.

標準ではこれを許可していますが、そのようなハードウェアでの実装を除外するものではありません (C89 が設計されたときよりもさらにまれではありますが)。

于 2013-04-05T11:27:54.583 に答える
5

タグは、特定の物理マシンではなく、C++ とその準拠の実装について質問していることを意味します。

それを証明するには、標準全体を引用する必要がありますが、単純な事実は、sizeof(T*)for anyの結果を保証するものではなく、(当然の結果として) for anyおよび) をT保証しないということです。sizeof(T1*) == sizeof(T2*)T1T2

于 2013-04-05T11:35:59.133 に答える
2

int配列に必要なメモリが配列に必要なメモリよりもはるかに少なくなると想定するのが理にかなっているマシンを想像できcharます。

たとえば、10 個を超える動的に割り当てられた整数を使用しない実装を指定できますが、多くのchar配列を自由に割り当てることができます。この場合、 は 1 バイトで十分ですが、は 4 バイト以上でint*ある必要があります。char*

それは理論的なビジョンです。

于 2013-04-05T11:31:48.563 に答える