0

マシンは、ジェネリック ポインターに割り当てるスペースをどのように知るのでしょうか? 型にキャストするときにのみ割り当てられますか?

4

4 に答える 4

3

「ジェネリックポインター」の意味がわかりませんが、「voidへのポインター」を意味する場合、それは単に他のポインター値を表すことができる型です。これは、任意の大きさでなければならないという意味ではありません。実際、これは「文字へのポインター」と同じサイズと表現であり (定義されている)、任意の型を指すこともできます。

于 2012-05-20T23:20:34.360 に答える
1

ほとんどのプラットフォームでは、ポインタは一般に、コンパイル対象のシステムのメモリ アーキテクチャに基づいて固定サイズになっています。それに関しては、彼らのタイプは関係ありません。ポイントは、複合体へのintポイントと同じサイズstructです。であるという事実は、これvoidを変更しません。

于 2012-05-20T23:16:44.737 に答える
1

すべてのポインタは、コンパイル時にコンパイラに認識されるサイズです。異なる場合があるのは、指摘されているアイテムのサイズです。必要なサイズをmalloc/calloc自身に渡すので、コンパイラは割り当てに問題はありません。

EDIT(コメントに応じて)異なるポインタのサイズが異なる場合があります。たとえば、ハーバード アーキテクチャ用にコンパイルされたコードでは、データ ポインターには、プログラム メモリに格納されているデータとデータ メモリに格納されているデータを区別する追加のストレージが含まれている必要がありますが、関数ポインターにはその追加のストレージは必要ありません。ただし、これはコンパイラーに認識されているため、ポインターの型を調べることで必要な割り当てサイズを認識します。

于 2012-05-20T23:16:59.797 に答える
0

ポインターは、何を指していてもすべて同じサイズです。異なるサイズになる可能性があるのは、ポインターが指しているものだけです。

于 2012-05-20T23:18:54.237 に答える