2012-02-18 9 views
1

私はこれが間違っている場合は申し訳ありません。あまりにも破壊的でないなら、私は後で修正するよう編集することができます。変数とパフォーマンスが重複しています

隣接するメモリに複数の変数が宣言されている場合、非常に低いレベルでは理解できるように、通常は1,2,4または8のバイト数をカプセル化するレジスタが作成されます。バイナリ・ローテート、さらにはプロセッサによる数の考え方などがあり、加算、減算、乗算、除算などの単純な数学で変更されています。

アーサー範囲をオーバーラップさせない抽象化の理由があるかもしれませんが、多くのラングエージは、コーダーが認識するように明確に定義された順序で命令が実行されると考えているため、隣接する割り当てられたメモリのバイト?

たとえば、すべてのビットが0で始まる割り当てられたブロックのブロック内で、バイト0から3をバイト1から4までと同様にintとして使用することができます。最初のバイトは、範囲に3を掛けた。

パフォーマンス上の理由がある場合は、まったく新しい変数の値をコピーしたりコピーしたりする必要があり、それ以外の方法では実行できない特定のアルゴリズムを実行する必要があります。非常に低いレベルですか?

+0

レジスタは、CPUの製造元によって作成されます。メモリ位置 "レジスタ"を呼び出すべきではありません。 – hirschhornsalz

+0

用語を改善してみてください。または、「レジスタ」を「メモリ範囲」またはそれに類するものに変更する必要がありますか? – alan2here

答えて

1

組み込み時にこのトリックに間違いはありません。オプティマイザは、CPUサイクルを節約してコードのサイズを減らすために、整数部分がどこにあるのかを日々知っています。例えば、32ビット整数変数が16ビットのみに適合する値に初期化される場合、最適化コンパイラは、メモリ内の32ビット値を格納する命令を、16ビット値を変数の下位ビットをクリアし、上位16ビットをクリアします。さらに、多くのオプティマイザはさらに進んでいきます。つまり、定数が2^16で割り切れる場合は、2^16で割った値を上位16ビットに格納し、下位16ビットをクリアします。

アーキテクチャによっては、このような操作を特定のプロパティのアドレスに制限するものがあります。たとえば、4バイトのメモリロード/ストア命令を4で割り切れるアドレスで実行する必要があります。これらの制限により、部分価値書術の適用性が低下する可能性があります。

関連する問題