What is size of Empty Class in C++ with virtual function?

(Last Updated On: April 6, 2017)

Answers contains the size of empty class in C++ with virtual function (4 or 8 bytes) and without virtual function (1 byte not 0 ) with reason and example.

Answer:

Size of empty class in C++

Size of empty class in C++ is 1 byte and not 0 byte without virtual function, whereas, with virtual function size is 4 bytes , whether it is windows or Linux platform etc.

Before explaining the reason for size of an empty class, let’s understand the meaning of empty class in C++ Programming.

Empty class means, a class that does not contain any data members e.g. int a , float b and string etc. However, a class can contain member functions. In below example, both classes will be called as an empty class.

If we calculate the size of both classes, output will be 1 byte for both.

C++ code example :

 

Why size of empty class is 1 byte in C++?

To an object of an empty class, 1 byte is allocated by compiler for unique address identification. So, if a class have multiple objects they can have different unique memory location. Suppose, if a class does not have any size, what would be stored on the memory location? That’s the reason when we create an object of an empty class in C++ program, it needs some memory to get stored, and the minimum amount of memory that can be reserved is 1 byte.

So, if we create multiple objects of an empty class, every object will have unique address.

Below C++ code example , always give unique address for both objects, created for the class EmptyClass.

 

 

Size of Empty Class in C++ with virtual function :

If an empty class contain virtual function, even though there is no data members in the class, its size will not be 1 byte but 4 byte because of virtual pointer i.e. VPTR. Virtual pointer size on 32 bit platform is 4 bytes and on 64 bit it is 8 bytes.

 

 

When we make a function as a virtual, compiler automatically set a hidden VPTR as a class data member field. So, no longer a class is an empty class that contains virtual function in C++.

For example size of below class that contain virtual function will be 4 bytes.

C++ code example :