libc の malloc(x) では、関数は少なくとも x バイトのメモリ領域へのポインターを返すと言われ、ポインターは 8 バイトに整列されます。この整列はどういう意味ですか?ありがとうございました。
3 に答える
これは、指定されたアドレス mod 8 が 0 であることを意味します。
pointer % 8 == 0
これは、正確性や効率性に影響を与える可能性がある低レベルの操作にとって重要です。この回答も参照してください。
これは、メモリが 8 の倍数であるアドレスから始まることを意味します。
気にする理由について: アラインされていないメモリの場合、CPU はすべてを読み取るために 2 回のアクセスを必要とする場合があります。場合によっては、試行すらせず、エラーをスローするだけです。「8 バイトにアラインされた」という言及は、呼び出し元がポインターのファッジを行う必要があるかどうかを知るためのものです。
(通常は、気にする必要はありません。ほとんどのアラインメントの問題はコンパイラが処理してくれます。ただし、何らかの理由で必要になった場合に備えて、情報はそこにあります。)
メモリ アライメントは、アドレスのモジュラスを表します。つまり、8 バイト アラインメントとは、アドレスが 8 の倍数であることを意味します。
これは、多くの場合 4 バイトまたは 2 バイトの倍数である「ワード」境界にアドレスを配置する必要がある多くの古いシステムでは重要でした。適切に配置されていない場合、プログラムは「配置エラー」でクラッシュしました。
最近のマシンでは、任意のアドレスからロードすることでこの問題を解決していますが、多くの場合、データをロードするのに数サイクルかかることを意味します。