跨不同平台/系统的限定符大小的变化

时间:2014-11-06 14:05:14

标签: c++ c

我已经在C和C ++中编程了很长一段时间,并且在初学者时代,我开始了解跨平台和系统架构的不同基础数据类型的大小变化。与C ++一样,该标准规定int的大小至少为2个字节(或等于或大于short ......我不记得了)。我知道它会有所不同,并且随着我们向前发展可能需要更大的尺寸。

我无法观察到的一件事是shortlong(也许是long long)等限定符的大小变化。它们在不同的编译器和操作系统中是相同的,即使数据类型的大小增加,有时大小与其长版本相同。

出于好奇,目前是否存在这些限定词具有更大容量或者只是固定大小的例子?

2 个答案:

答案 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 intint的版本不同。与long int vs int相同。 (例如) simple-type-specifier " long"很容易被误导。解析为long int类型(C ++ 11表10)作为句法糖的一种形式。但是,在此解决方案之后,类型大小的规则将应用于结果类型;它永远不会根据关键字short / long本身进行定义。

而且,是的,这些类型的大小已经发生变化,就像更熟悉的类型一样;例如,long int在当代64位Visual C ++中是4个字节,但在当代64位GCC中是8个字节。