5

私はこのコードの塊を持っています:

    #include <stdio.h>

    class CoolClass {
    public:
      virtual void set(int x){x_ = x;};
      virtual int get(){return x_;};
    private:
      int x_;
    };

    class PlainOldClass {
    public:
      void set(int x) {x_ = x;};
      int get(){return x_;}
    private:
      int x_;
    };
    int main(void) {
      printf("CoolClass size: %ld\n", sizeof(CoolClass));
      printf("PlainOldClass size: %ld\n", sizeof(PlainOldClass));
      return 0;
    }

CoolClass のサイズが 16 と表示されているので、少し混乱しています。どのように?なんで?vtable へのポインタがあっても、サイズは 8 にすべきではありませんか? oldclass のサイズは予想どおり 4 です。

編集: g++ 4.6.3 で Linux Mint 64 ビットを実行しています。

4

4 に答える 4

1

お使いのシステムが 64 ビット システムである可能性があるためです。

  • vptr の場合は 8 バイト。
  • int の場合は 4 バイト
  • ポインターに 64 ビットのアラインメントを与えるための追加の 4 バイトのパディング。

したがって、合計は 16 になります。

于 2013-04-01T11:29:59.393 に答える