2012-04-18 16 views
0

は誰でもヘッダを掘削、C++のintデータ型であるかについてSTHを伝えることができるとは何か私が見つけることができるテキストコードと物理ストレージ内のタイプの間の連結は何/int型、基本データ型

typedef int     INT; 

RAMに?コンパイラはこのintが何であるか知っていなければなりません。コンパイラにはどこに説明されていますか?

+1

googleのキーワードtypedef ... – ScarletAmaranth

+1

'typedef'は、そのタイプの別名を作成します。だからあなたのソースコードのどこに 'int'を置くことができるのかを知っていれば、' INT'を使うことができます。 –

+0

「sth」は誰ですか?なぜ彼は自分自身で質問できませんか? –

答えて

2

intは整数です。最も基本的なレベルでは、単純に数値として解釈される一連のバイトです。現代のプロセッサー(およびオペレーティングシステム)は、32ビットおよび64ビット(それぞれ4および8バイト)が最も一般的ですが、複数のサイズの整数をサポートしています。

ハードウェアで表現すると、これらは高電圧と低電圧に設定されたデータラインです。 32ビットパラレルデータバスは32ビットのデータラインを持ち、それぞれ1ビットを表します。数字100を表す場合は、2進表示(つまり1100100)に変換して、3,6および7の行を高く、残りの部分を低く設定します。プロセッサーや他のマイクロコントローラーは、内部機能とプログラミングに基づいてこの信号を解釈することができます。

+0

コンパイラにはint型の情報が含まれている必要がありますか?それは4バイトすなわち? – 4pie0

+0

'int'型は、特定のOSの詳細に基づいてサイズを変更するという点でちょっと複雑です。固定サイズの32ビット整数が必要な場合は 'int32_t'を使用できます。エンディアン(ビットオーダー)に関連する問題もあります。これはWikipediaで読むことができます。複雑さの概要を知るためには、他のint-size質問についても見てください。 – Polynomial

4

typedef int INTは、intを定義しません。それは逆です:INTintのように定義されています。 int自体は、ソースファイルではなく、コンパイラの中で定義されています。

typedefはメモリにまったくマップされません。これは、ストレージの種類、サイズなどを記述するテキストです。メモリにマップされる変数の型です。

+0

はい、それは最初の人があまりにも急いで、私の質問を密接に十分に – 4pie0

+0

OKを読んでいないように見えますが、VS2010で私のコンピュータ上でどこでコンパイラが基本的な型intを扱うかについてのこの情報を見つけることができますか? – 4pie0

+0

テキストファイルコンパイラでintを見つけると、これは4バイトであることがわかりますが(正確にはどこに記述されていますか?)、この事実に基づいて残りのコードはすべて理解できます(? ?) – 4pie0

2

intは、C++標準§3.9.1基本タイプに記述されています。実際のサイズは実装に依存します。基本型のサイズに関して、C++はC99を参照しています。 MIN_INTおよびMAX_INTなどの値が定義されており、<limits>ヘッダー、特にstd::numeric_limitsにある機能が定義されている<climits>ヘッダーを参照してください。これにより、プラットフォーム上のさまざまなタイプの範囲を判断する機能が提供されます。詳細はhereを参照してください。

あなたが言いたいtypedefは、INTという記号を使ってintを意味することを意味しています。

1

intは基本的なC/C++タイプなので、これ以上深くすることはできません。

テキストコードのタイプと物理的なRAMの記憶 の間のリンクは何ですか?コンパイラが であるとすれば、int i =に伝えると終了することはできません。彼はこれが何であるか知っている必要があります int。

Windowsの場合(私は他のオペレーティングシステムでの経験はありません)、コンパイラは実行可能ファイルにコードをビルドします。実行可能ファイルには、データセクタとコードセクタの2つのメインセクタがあります。 int iを宣言したとしましょう。コードがコンパイルされると、そのコードはメモリの場所に変換されます(例:0x0000004)。オペレーティングシステムが実行ファイル(Windowsでは.exeまたは.dll)を読み込むと、OSはアプリケーション用の仮想メモリを作成します。 (例えば、0x100000000)。したがって、int iは物理メモリの0x100000004に配置されますが、アプリケーション仮想メモリの0x0000004に配置されます。事がどのように動作するかの

上記の説明は簡略化されているバージョンが

+0

とコンパイラは4バイトが必要だと知っていますか?したがって、int 4バイトの情報はコンパイラのコードに含まれていますか? – 4pie0

+0

コンパイラを作成するのは人間だということを知っておくべきです。そして、 'int'が必要とするバイト数を決定するのはコンパイラの作成者次第です。しかし、誰もが4バイト(32ビット・プロセッサ用)または8バイト(64ビット・プロセッサ用)を選択する理由は、パフォーマンスに関連する理由があります。 – invisal

1

C++は、純粋にオブジェクト指向されていない、すべての定義された変数は、C++の用語では「オブジェクト」と呼ばれているが、(実際の事はより複雑になる可能性があります)。クラスのインスタンスではないタイプがあり、そのうちの1つであるintがあります。

intは、符号付き整数として解釈される少なくとも16個の連続ビットの単なるセットです。実際のサイズと特定のビットパターンが整数にどのようにマッピングされるかは、主にコンパイラとプラットフォームに依存します。

関連する問題