我已经在C和C ++中编程了很长一段时间,并且在初学者时代,我开始了解跨平台和系统架构的不同基础数据类型的大小变化。与C ++一样,该标准规定int
的大小至少为2个字节(或等于或大于short
......我不记得了)。我知道它会有所不同,并且随着我们向前发展可能需要更大的尺寸。
我无法观察到的一件事是short
,long
(也许是long long
)等限定符的大小变化。它们在不同的编译器和操作系统中是相同的,即使数据类型的大小增加,有时大小与其长版本相同。
出于好奇,目前是否存在这些限定词具有更大容量或者只是固定大小的例子?
答案 0 :(得分:3)
有一些例子:我知道系统(不是所有现代系统)
其中int
是16,32,36和48位;我认为有
也是24位或60位的情况(但那些会
真的是旧机器),也许还有其他一些价值观。
我实际上在int*
为16位的机器上工作,
但是char*
32(但那是很久以前的事了)。
当然,很多这些机器你不太可能看到
今天,除非你在嵌入式系统或大型机上工作。 (一世
认为很多嵌入式处理器仍有16位int
。)开
另一方面,即使在日常台式机或笔记本电脑上,
long
可以是32位(Windows和32位Mac和Linux))
或64位(64位Mac或Linux)。
答案 1 :(得分:2)
他们不是"限定符",真的。他们半描述不同的类型。 short int
与int
的版本不同。与long int
vs int
相同。 (例如) simple-type-specifier " long
"很容易被误导。解析为long int
类型(C ++ 11表10)作为句法糖的一种形式。但是,在此解决方案之后,类型大小的规则将应用于结果类型;它永远不会根据关键字short
/ long
本身进行定义。
而且,是的,这些类型的大小已经发生变化,就像更熟悉的类型一样;例如,long int
在当代64位Visual C ++中是4个字节,但在当代64位GCC中是8个字节。