所有体系结构上sizeof(float)总是等于sizeof(int)吗?

时间:2012-08-06 17:33:27

标签: c++ c memory malloc sizeof

我看到代码使用sizeof(int)为float分配内存 我想知道sizeof(float)在所有架构上是否始终等于sizeof(int)

float *pointer2Float = (float *) USER_DEFINED_MALLOC (...,..., sizeof(int))

注意:我认为这个USER_DEFINED_MALLOC是传统malloc的包装器。

由于

此致

6 个答案:

答案 0 :(得分:18)

不,有16位int和32位float的实现(主要是嵌入式系统)。

当然,根据标准,尺寸可以大不相同。

答案 1 :(得分:7)

所有类型的大小(charsigned charunsigned char 1 除外)都是实现定义的。因此 保证所有平台上sizeof(float)等于sizeof(int)

1。标准将char及其所有变体的大小定义为1字节。但是,1字节的数字是实现定义的!功能

答案 2 :(得分:4)

不,sizeof (int)sizeof (float)值是实现定义的,并不保证是相同的。

以下是两个值不同的系统示例:

在Cray MPP系统上:

sizeof (int)  is 8

sizeof (float) is 4

见这里:

  

“Cray C / C ++参考手册”,表3.“9.1.2.2类型”中的Cray Research系统数据类型映射

http://docs.cray.com/books/004-2179-003/004-2179-003-manual.pdf

大多数8位嵌入式系统的int为16位宽,sizeof (int)为2,而浮点符合IEEE-754,float为32位sizeof (float) 1}} of 4。

答案 3 :(得分:3)

没有。在C和C ++中,数据类型是特定于平台的。一般来说,这意味着:

  

但对于其他系统,一般规范是int具有系统体系结构建议的自然大小(一个“字”),四个整数类型char,short,int和long必须至少与前面的那个,char总是一个字节大小。这同样适用于浮点类型float,double和long double,其中每个类型必须至少提供与前一个一样多的精度。

(取自Data Types

在许多平台上,float和int通常都是32位,但情况并非总是如此,也不是实际规范的一部分。

答案 4 :(得分:2)

绝对不能保证sizeof (float)等于sizeof (int),我认为上述内容是编码错误。

应该使用sizeof *ptrToFloat支持sizeof (int)sizeof (float)

答案 5 :(得分:-1)

如果您正在编写数据类型大小非常重要的多平台,则可以创建头文件,例如:

#define INT sizeof(int)
#define FLOAT sizeof(float)
.
.
.

欺骗拱门是一种技巧。