C/C++基本数据类型所占字节数以及sizeof运算符的使用

时间:2023-01-11 17:26:19

基本数据类型所占字节大小:

32位编译器(指针4字节)
char :1个字节

short int :4 字节
int:  4个字节

long:   4个字节

double:   8个字节
long long:  8个字节
64位编译器(指针8字节)
char :1个字节
short int : 2个字节
int:  4个字节
double:   8个字节
long:   8个字节(32位和64位变得就是long,其他的均没有变化啊)
long long:  8个字节
  1. 定义:简单的说其作用就是返回一个对象或者类型所占的内存字节数。
  2. 用法:sizeof(对象/类型).对于基本数据类型和指针,sizeof返回的是所占字节数。
  3. 对于结构体的sizeof操作符,满足:
  4. 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
    2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍
    如有需要编译器会在成员之间加上填充字节(internal adding);
    3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最
    末一个成员之后加上填充字节(trailing padding)。
  5. #pragma pack(push) // 将当前pack设置压栈保存
    #pragma pack(2)// 必须在结构体定义之前使用
    struct S1
    {
    char c;
    int i;
    };//sizeof(S1) = 6
    struct S3
    {
    char c1;
    S1 s;
    char c2
    };sizeof(S3) = 10
    #pragma pack(pop) // 恢复先前的pack设置