5

我看到代码使用sizeof(int).
我想知道在所有架构上 是否sizeof(float)总是等于?sizeof(int)

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

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

谢谢

问候

4

6 回答 6

18

不,有 16-bitint和 32-bit的实现(主要是嵌入式系统) float

当然,根据标准,尺寸允许有很大的不同。

于 2012-08-06T17:35:14.253 回答
7

ALL 类型(除了char,signed charunsigned char1)的大小是实现定义的。因此,不能保证在所有平台上都sizeof(float)等于。sizeof(int)

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

于 2012-08-06T17:36:38.903 回答
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,32float位宽sizeof (float)为 4。

于 2012-08-06T17:42:49.150 回答
3

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

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

(取自数据类型

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

于 2012-08-06T17:37:06.093 回答
2

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

应该用于或。 sizeof *ptrToFloat_sizeof (int)sizeof (float)

于 2012-08-06T17:37:44.093 回答
0

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

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

这是欺骗拱门的把戏。

于 2012-08-06T20:05:18.847 回答