空の C クラスのゼロ以外のサイズの背後にある謎
C では、空のクラスはメモリを占有しないという概念が思われるかもしれません。直感的。ただし、この仮定は、メンバーをまったく持たないクラスでさえゼロ以外のサイズを示すという特殊な動作によって疑問視されます。この明らかな矛盾はなぜ存在するのでしょうか?
結局のところ、C 標準ではオブジェクトとそれに対応するクラスのサイズがゼロになることを明示的に禁止しています。この規定は、同じメモリ空間を共有する可能性がある個別のオブジェクトを区別するという固有の要件から生じています。
標準では、内容に関係なく、すべてのクラスの最小サイズが 1 でなければならないことを義務付けることで、この区別を保証しています。これにより、2 つの異なるオブジェクトが同一のメモリ アドレスを持つことがなくなります。このような状態になると、予測不可能で望ましくない動作が発生する可能性があります。
したがって、クラスにユーザー定義のデータ メンバーがまったくない場合でも、クラスには本質的に実装の詳細が含まれます。仮想関数テーブルやポインタ メンバなど。これらの重要なコンポーネントは、ユーザーには見えませんが、クラスのサイズに影響を与えるため、空のクラスであってもゼロ以外のメモリ量を占有することになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3