在C++中,如果定义一个空结构体或类型
struct A{};
class B{};
sizeof(A)和sizeof(B)都是1。因为编译器会为所有的结构体或类型的示例分配一个独立的地址,如果是空结构体或类型就会在其中自动加入一个char类型,用来给结构体或类型分配地址。
如果定义:
struct A{char a[3]};
classB{char a[3]};
sizeof(A)和sizeof(B)都是3.
如果定义:
struct A{short b;char a[3]};
classB{short b;char a[3]};
sizeof(A)和sizeof(B)都是6.
如果定义:
struct A{int b;char a[3]};
classB{int b;char a[3]};
sizeof(A)和sizeof(B)都是8.
如果定义:
struct A{long long b;char a[3]};
classB{long long b;char a[3]};
sizeof(A)和sizeof(B)都是16.
因为:为快速读取数据,编译器会以结构体或类中占用最大空间的数据类型的大小作为每次增加的最小单位。即对齐方式不同。
*所有基本数据类型中,long 和 指针根据机器位的不同在变化,当32位机时,long和指针都占4位字节;当64位机时,就都为8字节。