ホームページ >バックエンド開発 >C++ >空の C クラスのサイズがゼロ以外になるのはなぜですか?

空の C クラスのサイズがゼロ以外になるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 15:18:30469ブラウズ

Why Do Empty C   Classes Have a Non-Zero Size?

空の C クラスのゼロ以外のサイズの背後にある謎

C では、空のクラスはメモリを占有しないという概念があるように思えるかもしれません。直感的。ただし、この仮定は、メンバーをまったく持たないクラスでさえゼロ以外のサイズを示すという特殊な動作によって疑問視されます。この明らかな矛盾はなぜ存在するのでしょうか?

結局のところ、C 標準ではオブジェクトとそれに対応するクラスのサイズがゼロになることを明示的に禁止しています。この規定は、同じメモリ空間を共有する可能性がある個別のオブジェクトを区別するという固有の要件から生じています。

標準では、内容に関係なく、すべてのクラスの最小サイズが 1 でなければならないことを義務付けることで、この区別を保証しています。これにより、2 つの異なるオブジェクトが同一のメモリ アドレスを持つことがなくなります。このような状態になると、予測不可能で望ましくない動作が発生する可能性があります。

そのため、クラスにユーザー定義のデータ メンバーがまったくない場合でも、クラスには本質的に実装の詳細が含まれます。仮想関数テーブルやポインタ メンバなど。これらの重要なコンポーネントは、ユーザーには見えませんが、クラスのサイズに影響を与えるため、空のクラスであってもゼロ以外のメモリ量を占有することになります。

以上が空の C クラスのサイズがゼロ以外になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。