크기 등급의 계산
메모리 크기에 따라주의 :
1. 가상 함수를 컴파일러가 클래스의 가상 함수 테이블을 만들 필요가 클래스 첫 번째 주소의 가상 함수 테이블에 대한 포인터를 저장하는 데 필요한,
모든 인스턴스 2. 정적 멤버 함수, 클래스 공유, 를 sizeof 계산하지 않는다
3. 일반 정상 또는 정적 함수를 스택에 저장되고, 카운트는 sizeof되지;
예
class A //12
{
public:
virtual void funa();
virtual void funb(); //4
void func();
static void fund();
static int si;
private:
int num; //4
char sex; //1
};
메모리 정렬 규칙은 Funa () 및 funb ()는 가상 함수 테이블의 선두 어드레스를 구축, 4 바이트의 크기가 0 FUNC () 및 스택에 저장 기금 ()를 오프셋, 그것은) (sizeof의 아니다 계산은, Si를 0 오프셋 NUM 4 바이트 계산된다) 모든 인스턴스 sizeof의을 (공유되지 않는 정적 멤버 함수 성은 오프셋 0에서 1 바이트이고, 상기 데이터 항목은, 전류를 산출 클래스 사이즈 9 전체 배향이며, 성별 3 바이트를 작성 후, (A)의 크기는 12 바이트이다.
추천 도서의 블로그
[1] C ++ 클래스 사이즈 계산 https://blog.csdn.net/fengxinlinux/article/details/72836199
[2]의 상세한 설명은 C ++ 클래스 사이즈 https://blog.csdn.net/longjialin93528/article/details/80160467
[3] C ++ 클래스 바이트 정렬 https://blog.csdn.net/magiclyj/article/details/72922150