-1

Javaでは、デフォルトでjava.lang.*が含まれています[これにはプリミティブがありますか] Boolean、Integer、...ラッパーが含まれているため、Integer iと言ったときにコンパイラーが定義を理解できます。

プリミティブデータ型はどうですか?

それはどのように知られていますか?

どこで定義されていますか?

コンパイラは割り当てられるメモリの量をどのように知るのですか?

int x;
double d;

int が 4 [2 バイト] 、 double が 8 バイトであることをどのように知っていますか?

sizeof はそれに応じてサイズを指定します。コンパイラが利用できるメタデータのようなものですか?

4

2 に答える 2

2

C および C++ では、これらのプリミティブはまさにプリミティブです。それらはコンパイラ自体で定義されています(コンパイラがさまざまなアーキテクチャのコンパイルオプションを持っている「ポータブル」コンパイラでは、これらのタイプを定義する複数のファイルがあると思われます)。C 標準 (C++ にも同じことが当てはまります) は、これらの型の最小サイズをいくつか定義していますが、実際のサイズはコンパイラ次第です。

ほとんどの場合、これらの型は特別なものではありません。初期化中の一部のコードが型を設定し、これらの型のサイズ、配置要件、およびその他の基本的な基準を定義しているだけです。そしてもちろん、これらの型で必要な組み込み演算子にアクセスして実行するためのコードを生成する方法。

はい、sizeof()コンパイル中に型に関するデータを使用することで解決されます。複合型 ( structclassunionおよび配列) の場合、コンパイラはサイズのアラインメントも考慮します。

于 2013-07-02T00:18:17.693 に答える
0

@Mats Peterssonの回答に加えて:

How does the compiler know how much memory to be alloted?  

割り当てるメモリは、プラットフォームによって異なります。各基本型のサイズには、保証された最小範囲があります。メモリの量は少なくともそのサイズです。

たとえば、unsigned char の範囲は 0 ~ 255 (8 ビット) です。コンパイラは最低 8 ビットを割り当てる必要があります。ただし、12、16、または 32 を割り当てることができます。

一般に、プロセッサのワード サイズが標準で指定された最小範囲をサポートできる限りunsigned int、an のサイズはプラットフォームのネイティブ ワード サイズです。

intが4 バイトであるか、またはが 8 バイトであるという保証はありませんdouble。一部の浮動小数点プロセッサは、80 ビット以上をサポートしています。

Where's it defined?

範囲指定は C++ 言語標準で規定されており、コンパイラの定義はシステム ファイル<limits>または<climits>.

于 2013-07-02T00:32:38.217 に答える