記憶の整理 -> 個人面接の理解

データは一定の順序に従ってメモリ上に配置されますが、データの種類によって占有バイト数が異なるため、アドレスを分割する「メモリ アライメント」という手法が使用され、空間内のメモリの格納アドレスを標準化する機能があり、検索上非常に重要です。

例えば:

struct k {     char a;     ダブルb;     文字c;     int d; };




この構造だと、char が 1b、double 8b、int 4b で、直接計算が 14 バイトの場合、メモリアライメント計算では先頭の 8 バイトが最大であることがわかります (double、int の最初の 4 バイトが 8 で割り切れる場合は置き換え可能)。

1(+7)+8+1+4(+3) は 24 バイトと計算されますが、これは一例にすぎないため、これを見つけるのは非常に困難です。ただし、順序を変更すると異なるため、従うべきアドレス アドレッシング ルールを与えるには特定の仕様が必要です。メモリ アライメントがあり、バイト アライメントと混同しないでください

バイトアライメントとは何ですか

バイト アラインメント: コンピュータ ストレージ システムはデータをバイト単位で格納し、整数 (int) データは 4 バイト、文字 (char) データは 1 バイト、短整数 (short) データは 2 バイトなどのように、データ型が異なると異なるスペースを占めます。コンピュータでは、データの読み書きを高速に行うため、デフォルトでは、整数データ(int)はアドレスが4で割り切れる先頭位置に格納され、文字データ(char)は任意のアドレス位置(1で割り切れる位置)に格納され、短整数(short)データはアドレスが2で割り切れる先頭位置に格納されます。これはデフォルトのバイトアライメントです。

メモリアライメントとは何のためにあるのか

メモリアライメントが実装される場所は、オブジェクト内に複数のメンバ変数が含まれる構造体や共用体などの構造体が一般的ですが、以前に書いた記事を参照してください

メモリアライメントの実行方法

アライメント方法は主にアライメント係数に基づいています。まず、プリコンパイル コマンドに従って変更できますが、設定されていない場合は、最も広いデータ型がアライメント係数として使用され、残りのデータ メンバーはアライメント係数に従って格納されます。合計がこの係数を超える場合は、次の標準アドレス空間に移動する必要があり、残りの空きアドレスはコンパイラによって埋められます。これらのバイトは一般に無意味なデータであり、アドレス指定を容易にし、検索時のエラーを防ぐためにのみ使用されます

おすすめ

転載: blog.csdn.net/hoxidohanabi/article/details/128066078