Table of Contents
メモリに保存されているデータがどのようにCとC++で効率的なプログラミングに不可欠であるのかを理解する。 構造と組合は、メモリレイアウトとサイズに影響を与える基本的なデータタイプです。 この記事では、これらのデータタイプにメモリが割り当てられ、どのようにしてそのサイズを正確に計算するかを説明しています。
構造の記憶レイアウト
C と C++ の構成は、変数の集合です。異なるタイプは、単一の名前でまとめられます。コンパイラは、各メンバーを順次配置することで、構造のメモリを割り当て、アライメントの要件を満たすことができます。
構造の合計サイズは、そのメンバーのサイズとアライメント用に追加されたパディングの合計です。パディングは、各メンバーがその大きさやアライメントの要件によって不可視のアドレスで始まることを保証します。
ユニオンの記憶レイアウト
ユニオンは構造と似ていますが、メモリ割り当てが異なります。ユニオンのすべてのメンバーは、その最大のメンバーのサイズと等しい同じメモリスペースを共有します。これにより、複数のデータタイプが同じメモリの場所を占有することができます。
組合の大きさは、その最大のメンバーによって決定されます。また、アライメントのパッドを入れることも可能です。 1人のメンバーに書き込むと、他のメンバーのデータに影響します。そのため、非イオンはメモリ効率なデータ共有に使用されます。
データサイズを計算する
構造と組合のサイズを計算すると、個々のメンバーのサイズをまとめ、アライメントのパディングを検討することが含まれます。 ]]sizeof] C および C++ の演算子は、バイトの合計サイズを提供します。
例えば、との構造を考えます。構造のサイズはの大きさ、の大きさ、およびアライメントのパディングによって異なります。同様に、ユニオンのサイズは最大のメンバーのサイズです。
- ]sizeof] を使用して、合計サイズを決定します。
- 各メンバーのアライメント要件を検討してください。
- コンパイラでパディングするアカウント。
- 組合がすべてのメンバー間でメモリを共有していることを忘れないでください。