C++sizeof実例解析

1550 ワード

C++の中でsizeofを使うのはCより複雑です。C++類にはstatic静的変数、virtual虚関数、継承、派生などがあります。sizeofはC言語の一つの単眼オペレータで、C言語の他のオペレータ+、--などです。関数ではないです。sizeofオペレータは、その動作数の記憶サイズをバイト形式で与えた。サイゼフの使用形態は三つあります。サイゼフ(var_)nameまたはsize of var_nameまたはsizeof(var_)タイプ)例1:(構文及び構文関数を無視した列)

class A 

    public:
        void hello(){} 
}; 
sizeof(A)= 1;
は、必ずゼロではない。例を挙げると、ゼロならば、class A[10]オブジェクト配列を宣言しますが、オブジェクトごとの空間はゼロです。この場合、A[0]とA[1]は区別できません。
Aは空のクラスなので、バイトの1割は2つの異なるオブジェクトを区別するためであり、プレースホルダと見なしても良いし、バイトのアドレスは対象のアドレスである。ここの1も絶対ではないです。コンパイラのような設定です。例2):

class B 

    public:
         void hello(){}
         static int i;
}; 
    sizeof(B) = 1;
static変数はクラスで共有されているので、静的領域に空間を割り当て、コンパイル時に空間を割り当て、クラスメモリを占めない。例3:

classC

    public:
        virtual void hello(){}
};
sizeof(C)= 4;
B類には虚関数があり、これに対応して虚表ポインタが存在し、4バイトを占め、ちょうどポインタの空間である。また、複数のvirtual関数がある場合や、複数のクラスがCクラスを継承している場合、虚数関数も4バイトしか占めていません。例えば、【例4】:

class D : public C
{
    public:
        virtual void world(){}
        virtual  void nihao(){}
};
sizeof(D)= 4;
【例5】:

class E

    public:
          virtual void hello(){}
          virtual void world(){}
          staticint i;
          static int j;
          int k;
};
     sizeof(E) = 8;
はあなたを助けてほしいです。