我看到代码使用sizeof(int)
为float分配内存
我想知道sizeof(float)
在所有架构上是否始终等于sizeof(int)
?
float *pointer2Float = (float *) USER_DEFINED_MALLOC (...,..., sizeof(int))
注意:我认为这个USER_DEFINED_MALLOC
是传统malloc的包装器。
由于
此致
答案 0 :(得分:18)
不,有16位int
和32位float
的实现(主要是嵌入式系统)。
当然,根据标准,尺寸可以大不相同。
答案 1 :(得分:7)
所有类型的大小(char
,signed char
和unsigned 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)
.
.
.
欺骗拱门是一种技巧。