4
double a;
unsigned int b;

実行時に、OS はこれらの変数に関連付けられているバイト数と、それらのビットをどのように解釈する必要があるかをどのように知るのでしょうか? これが言語/OS に依存する場合は、Windows 上の C を想定します。

変数識別子のビット表現をバイトサイズとデータ型にマップする LUT はありますか? uC でのアセンブリ プログラミングから、コンパイラは魔法のように変数に割り当てられたバイト数を認識し、ゼロ パディングなどを適切に実行したことを思い出します。

4

2 に答える 2

5

OS に関する限り、これらはメモリの単なるブロックです。「ランダムなビット文字列」以外は、何が含まれているかについて何も知りません。

スマートな機能はすべてコンパイラにあります。コンパイラは変数の型を追跡し、適切なバイト数のロード命令とストア命令を生成し、適切なサイズとエンコード方式のオペランドを操作するコードを生成します (たとえば、 unsigned int に対する signed 操作の代わりに unsigned add 操作を行う)。

于 2013-07-03T01:37:32.103 に答える
1

言語とコンパイラに依存します。最近では unsigned int は 32 ビットですが、言語、コンパイラ、およびターゲットに依存するルールであるとは限りません。古い 8086 または 16 ビット プロセッサ (マイクロコントローラ) で int を使用する場合、int は 16 ビットである可能性があります。ダブルはもう少し標準的です。IEEE 754 浮動小数点数を想定すると、シングルは 32 ビット、ダブルは 64 ビットです。ただし、これも言語、コンパイラ、およびターゲットに依存します。

次に、このように連続して定義されている場合、これらの間のパディングも言語、コンパイラ、およびターゲットに依存します。これらがそれぞれ64ビットと32ビットであると仮定すると、コンパイラは32ビット境界でうまく整列するため、何かをパディングする必要はありません(提供した2行に基づく大きな仮定)。ただし、両方が 64 ビットで整列されるように、32 ビットのパディングを配置することを選択する場合があります。

于 2013-07-03T01:37:42.593 に答える