多说说
在一个16位的系统中,使用8位的整型,就像姑娘裹上了小脚,不能释放其洪荒之力;使用32位的整型,又如小马拉重车,效率极低。
所以在非必要的情况下,优先使用和系统等长的整型,这是效率最高的。而int/uint当初就被设计成和系统等长。
(
所以为DOS16服务的TC中sizeof(int)就是2,这是在编译器设计阶段就定好的,即你将TC放到x64中sizeof(int)也是2,不会变成8)
但是,后来,32位系统存活时间太长了,那些烂货们在各种需要平台无关的地方使用int而不会出现问题,于是大量代码中在不该用int的地方用了int。
于是,大部分编译器厂家只好认怂,升到64位时依然将int定为32位,免得用户的旧代码奔溃掉。
(
所以为win64服务的VC++15中sizeof(int)是4,而不是8)
附上各种数据模型:
TYPE
LP32
ILP32
LLP64
LP64
ILP64
char
8
8
8
8
8
short
16
16
16
16
16
int
16
32
32
32
64
long
32
32
32
64
64
long long
64
64
64
64
64
pointer
32
32
64
64
64
在x64中,
gcc/clang选择使用LP64,而vc选择使用LLP64。
看得好乱,所以C标准中加了个<
stdint.h>,里面定义了各种指定长度的整型类型,比如
int32_t,那就一定是32bits
int_least32_t,那就至少是32bits,可能是32bits,可能是64bits甚至更高,编译器会选一个位数尽可能少,但一定大于32bits的类型给你
int_fast32_t,那就至少是32bits,可能是32bits,可能是64bits甚至更高,编译器会选一个效率尽可能高的类型给你。