不同机器和尺寸的C数据类型的大小(复数长双)

tur*_*1ng 2 c comparison types sizeof

有人知道在不同机器上比较C数据类型大小的网站或论文吗?我对像System z之类的一些"大型"机器的价值感兴趣.

并且:是否存在任何计算机上最大的本机数据类型可以具有的字节上限,并且它总是类型complex long double

编辑:我不确定,但SIMD寄存器数据是否也利用了CPU的缓存?将存储在特殊单元中但不使用L1/L2/L高速缓存的数据类型超出了我的目的.只检查{char,short,int,long,long long,float,double,long double,_Bool,void*}(和_Complex)类型.

AnT*_*AnT 6

C数据类型大小不依赖于机器平台.这取决于编译器的实现.同一硬件平台上的两个不同编译器可能以不同方式实现基本类型,从而导致完全不同的大小.

您还应该考虑到这样的事实,即size_t不能保证这些标准类型由用户可访问的类型表示,如unsigned int.这size_t可能是通过特定于实现的未签名类型的未知大小和范围来实现的.

而且,理论上(和迂腐地)C语言在大小方面没有"最大"类型.C语言规范绝对不保证基本类型的相对大小.C语言仅保证每种类型的可表示值的相对范围.例如,语言保证范围int不小于范围short.但是,由于[几乎]任何类型都可以包含任意数量的填充位,理论上类型的对象大小short可能大于类型的对象大小int.当然,这将是一种非常奇特的情况.

但在实践中,您可以预期这long long int是最大的整数类型,并且long double是最大的浮点类型.如果您愿意,还可以将复杂类型包括在内.