#ifndef _STUDY_CLASS_SIZE_H_
#define _STUDY_CLASS_SIZE_H_
#include<iostream>
#include<string>
class CEmpty
{
};
class CEmpty1
{
public:
void Show()
{
std::cout << "CEmpty2::Show" << std::endl;
}
};
class CEmpty2
{
public:
virtual ~CEmpty2() {}
virtual void Show() = 0;
};
class CEmpty3
{
public:
virtual void Show()
{
std::cout << "CEmpty3::Show" << std::endl;
}
};
class COne
{
private:
char m_char;
};
class COne2
{
private:
char* m_pchar;
};
class CTwo
{
private:
char m_char;
uint64_t m_ui;
};
class CThirth
{
private:
uint64_t m_ui;
char m_char;
};
class CFour
{
private:
char m_char;
uint64_t m_ui;
std::string m_strName;
};
class CFour2
{
private:
char m_char;
char* m_pchar;
uint64_t m_ui;
std::string m_strName;
};
class CFive
{
void Show()
{
std::cout << "CFive::Show" << std::endl;
}
private:
uint64_t m_ui;
char m_char;
std::string m_strName;
};
class CSix
{
virtual void Show()
{
std::cout << "CSix::Show" << std::endl;
}
private:
uint64_t m_ui;
char m_char;
std::string m_strName;
};
class CSeven :public CSix
{
void Print()
{
std::cout << "CSeven::Show" << std::endl;
}
private:
uint32_t m_uitext;
};
class CEight :public CSix
{
virtual void Print()
{
std::cout << "CSeven::Show" << std::endl;
}
private:
uint32_t m_uitext;
};
void testSize()
{
CEmpty* p1 = new CEmpty();
std::cout << sizeof(p1) << std::endl;
std::cout << sizeof(CEmpty) << std::endl;
std::cout << sizeof(CEmpty1) << std::endl;
std::cout << sizeof(CEmpty2) << std::endl;
std::cout << sizeof(CEmpty3) << std::endl;
std::cout << sizeof(COne) << std::endl;
std::cout << sizeof(COne2) << std::endl;
std::cout << sizeof(CTwo) << std::endl;
std::cout << sizeof(CThirth) << std::endl;
std::cout << sizeof(CFour) << std::endl;
std::cout << sizeof(CFour2) << std::endl;
std::cout << sizeof(CFive) << std::endl;
std::cout << sizeof(CSix) << std::endl;
std::cout << sizeof(CSeven) << std::endl;
std::cout << sizeof(CEight) << std::endl;
}
#endif // _STUDY_CLASS_SIZE_H_
在 X64 环境下结果:
8
1
1
8
8
1
8
16
16
56
64
56
64
72
72
结论:在X64环境下
1)指针8个字节
2)空类1个字节
3)成员函数不占字节
4)成员函数有虚函数8个字节(一个类总共8个字节)
5)内存对齐