C++ 関連のナレッジ ポイントを保存する

1. メモリの調整

 

CPU はメモリを断片として扱い、ブロック サイズは 2、4、8、または 16 バイトにすることができるため、CPU がメモリを読み取るときは、断片ごとに読み取ります。ブロックのサイズは (メモリ粒度) と呼ばれます。 . メモリ読み取りの粒度。

メモリの位置ずれが読み取り速度に影響を与える理由を見てみましょう。

    CPU が 4 バイトのデータをレジスタに読み取りたいと仮定します (メモリ読み取り粒度が 4 であると仮定します)。これについて 2 つの状況で説明します。

           1. データはバイト 0 から始まります

        2. データは1バイトから始まります

解析: データがバイト 0 から始まる場合、バイト 0 ~ 3 の 4 バイトが直接レジスタに読み込まれ、決済が完了します。

        データが 1 バイトから始まる場合、問題は非常に複雑です。最初に最初の 4 バイトをレジスタに読み込み、次に 4 ~ 7 バイトのデータをレジスタに読み込み、その後 0 バイト、4、6、7 を読み込みます。バイトのデータが削除され、最終的に 1、2、3、4 バイトのデータがレジスタにマージされるため、メモリが整列されていないレジスタに対して多くの余分な操作が実行され、CPU のパフォーマンスが大幅に低下します。

     しかし、これはまだ楽観的な状況であり、上で述べたように、一部の CPU だけが動作を希望し、他の CPU は境界が整っていない場合に直接停止するため、メモリ アライメントの機能の 1 つはプラットフォーム移植の理由です。

 

おすすめ

転載: blog.csdn.net/kyq156518/article/details/89024321