image.png
    在计算机中,可以把内存看作是一个以一个字节为单位的线性列表。计算机并没有把内存进行分类。我们从内存读取数据的时候通过指令和地址。cpu根据不同的指令获取不同长度的数据。例如 mov al 0h表示在从0地址获取1个字节的数据到寄存器al中,mov ax 0h表示从0地址读取2个字节的数据到寄存器ax中。cpu根据需要操作的寄存器的位数去从而得出获取不同宽度数据的结果。到了高级语言。高级语言需要编译成机器码,也需要和汇编语言一样生成cpu的指令。为此高级语言使用了类型系统去处理数据的大小。通过类型系统。编译器可以计算出从高级语言转换到机器语言的数据大小,从而生成对应的机器指令。
    不同的操作系统下的C语言类型长度不一样。32位linux和32位windows使用了ILP32模型,64位linux系统使用了LP64模型。64位windows系统使用了LLP64模型。
    c语言window msvc数据类型与大小.png
    c语言linux gcc数据类型与大小.png