(四)c语言之字节对齐方式

// 对齐原则:每一成员需对齐为后一成员类型的倍数

// 补齐原则:最终大小补齐为成员类型最大值的倍数
#include <iostream>
#include <memory>
#include <string>
using namespace std;

// 空类,考虑的是当我们声明该类型的实例时候,它必须在内存中
// 有一定的空间,否则就是不存在的,导致无法使用这些实例
class A
{
        A() {};
};

// 虚函数的大小为4 字节对齐
class B
{
        B() {};
        virtual void func() {};
};

/* 4字节
int     4       4
short   2       4+2=6   6不是下一个字节4的倍数,6+2=8
int     4       8+4=12  12是下一个字节1的倍数
char    1       12+1=13 13补齐为4的倍数
*/
struct C
{
        int a;
        short b;
        int c;
        char d;
};

/* 4字节
int     4       4        是下一个字节1的倍数
short   2       4+2=6    是下一个字节1的倍数
char    1       6+1=7    不是下一个字节4的倍数 7+1=8
int     4       8+4=12   是4的倍数
*/
struct D
{
        int a;
        short b;
        char c;
        int d;
};
int main()
{
        cout<<"class:  "<<sizeof(A)<<endl;
        cout<<"class:  "<<sizeof(B)<<endl;
        cout<<"struct:  "<<sizeof(C)<<endl;
        cout<<"struct:  "<<sizeof(D)<<endl;
        return 0;
}
 

 

 

posted @ 2020-09-16 10:39  欧阳图图的少年成长记  阅读(335)  评论(0编辑  收藏  举报