Code: /******************************/ class A { private: int a; char b; }; class B { private: char b; }; int main() { A a; B b; cout<<sizeof(a)<<" "<<sizeof(b)<<endl; return 0; } /******************************************/ What will be the output of the above program? The output will be,- 8 1 Why?... In class B, 1 byte is as usual allocated for char 'b'. But in case of class A, 4 bytes for integer 'a' and next 4 bytes for char 'b'. This is because of packaging format.
I didn't knew this. Its really kool so out of excitement I tried even the double one and it gave 16 and 1
Hmmm, even the size of pointers can change. If you have double and char* still it will be (8 + 8 =)16.
If you visualize the memory as rows and columns then if you need to allocate some memory in different rows[for different variables] then you have to allocate n no of cols of bytes for each variable and n is choosen as maximum size. e.g. Variable 1 mem [8 bytes] | | | | | | | | Variable 2 mem [4 bytes] | | | | Instead of 4 bytes it allocates 8 to keep the packaging format in good shape for second variable memory. If you go about by sequential memory segment then also allocating each variable memory of n [choosen as maximum] is easier and so it allocates 8 + 8 bytes instead of 8 + 4 bytes.