资料:Python中的变量与内存理解
C语言中的基本数据类型:
在32位、64位系统当中,唯一改变的是指针的长度;在32位系统当中是4个字节、64位则是8个字节。所谓的32位、64位,这个指的是寄存器的位宽。
在32位的操作系统下每种类型所占内存:
>int:4字节 >unsigned int:4字节
>short:2字节 >unsigned short:2字节
>long:4字节 >unsigned long:4字节
>long long:8字节 >unsigned long long :8字节
>char :1字节
>float:4字节
>double:8字节 >unsigned double:4字节
>long double:有的是8字节,有的是10字节,有的是12字节或16字节。规定long double的精度不少于double的精度,就像int和long int一样。关于具体的编译器的情况, 可以打印 sizeof(long double)得知。
>string:32字节
>所有类型的指针都是 4字节
>共有体(联合体)union:取其中占有字节数最大的数据类型所占有的字节数。
>函数:除了void型。其他都函数占有的字节数等于函数的返回类型所占有的字节数。与函数体内部无关。
如:float fun(){ return 2;}
sizeof(fun())= 8
>结构体、类:内部各数据类型占用之和,注意边界对齐。如:
struct fun1{
int a; //4
double b; //8
char c; //1
};
sizeof(fun1)=24
truct fun2{
int a; //4
char c; //1
};
sizeof(fun2)=8
特殊:
structfun3{
string a; //32
char b,c,d; //3
};
sizeof(fun3)=36
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负,比如16位系统中一个int能存储的数据的范围为–32768 ~ 32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
64位系统下的long类型和pointer(指针)类型长度为64位
32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了2的64次方= 4294967296(bit)的32次方=数值大于1亿GB。换而言之,就是说32位系统的处理器最大只支持到4G内存,而64位系统最大支持的内存高 达亿位数。