我发现这个问题的答案不尽相同,我知道必须有一个确定的答案。 C中四种主要数据类型的最小分配内存大小是多少? int
,double
,float
和char
是我想到的。 signed
或unsigned
类型是否以任何方式更改大小?C数据类型的最小保证大小/范围
回答
您可以使用sizeof(variable)
:
举个例子我的本地机器上运行此:
sizeof (char) = 1
sizeof (double) = 8
sizeof (float) = 4
sizeof (int) = 4
sizeof (long) = 4
sizeof (long long) = 8
sizeof (short) = 2
sizeof (void *) = 4
注意:你得到的值可以通过OS /编译器/ CPU架构来决定。
尺寸是特定于平台和编译器的尺寸。 – 2013-02-11 15:27:39
@Toon - 是的,他仍然可以使用sizeof运算符来确定他们自己。 – 2013-02-11 15:29:45
是的,sizeof是安全的。但固定值可能会令人困惑。 – 2013-02-11 15:30:37
只有char
保证是1
字节的标准。
其他类型具有实现定义的大小。
的确,但请注意,1个字节可能不是八位字节。有些平台的字节宽度为32位。 – 2013-02-11 16:12:51
收件一点测试程序,并看到自己:
int main(int argc, char* argv[])
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(unsigned char));
printf("%d\n", sizeof(unsigned int));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(float));
return 0;
}
“整数,浮点,双” 是平台相关的(16,32,64)。符号不会影响大小,只能解释。
'%zu',而不是'%d'。 'sizeof'返回'size_t',而不是'int'。 – 2013-02-11 15:32:13
重要的是要注意,结果会根据您编译的平台而有所不同。我建议你把这个添加到你的答案中,Leor。 – junix 2013-02-11 16:51:16
签名或无符号类型是否以任何方式更改大小?
不,它只影响保存的数据范围。有关短数据类型(2个字节),请参见下面的示例。
- 签署-32,768到+32,767
- 无符号的0到65,535
这是一个很大的问题。我把你引用到C99 6.2.5。而文章Wikipedia C data types没问题。
- char大到足以存储基本执行字符集的任何成员。它不是一个字节(由8位定义),考虑它的一个好方法是它是最小的可寻址/可分配单元(MAU),就象你在你的问题中写的一样,但在某些系统上不是一个字节。
- 整数是有趣的。我认为他们应该至少保持2^15-1(16比特),但目前我在C99中找不到它。在标准的新版本中,我相信它们实际上被定义为至少32位,因为很多人都认为它们是。但总的来说,您必须假设它们是按照MAU(
sizeof()
)定义的实现。不仅如此,规范还允许填充位(例如用于纠错)。因此,在8位字符系统中,如果sizeof(int)
为4,则最大整数不一定是2^31-1,因为规范允许将某些位用作“填充”。因此唯一可以确定的方法是使用limits.h
! float/double也是实现定义的,尽管double总是大于float。通常这些由实现定义为与IEEE-754规范兼容(它们分别需要最少32位和64位),但C99不需要它。但是如果你的char大小是32位,那么sizeof(float)可能只有1。
signed/unsigned不改变大小。
由于这些原因,<stdint.h>
是C语言中最重要的新增功能之一。在此之前,编写跨平台代码非常困难。
ANSI C为各种基本数据类型定义了以下尺寸。
- 炭
- 最小的带符号范围:-128 .. 127
- 最小无符号范围:0..255
- 可以较大,但无论大小,的sizeof(char)的== 1
- 的sizeof(无符号字符)== 1
- 短
- 最小的带符号范围:-32768 .. 32767
- 最小无符号范围:0 .. 65535
- 可以更大
- 长
- 最小的带符号范围:-2147483648 2147483647 ..
- 最小无符号范围:0 .. 4294967295
- 可以更大
- INT
- 必须有,在miminum,相同的范围为短
- 可以有相同的范围作为长
- 不能有一个范围比长
- 短< = INT更大,并且诠释< =长,但短<长
有一堆对浮点型和双多个规则,但一般地,浮体的范围是< =一个double的范围(对于现代机器--- float是4个字节,double是8)。
- 1. Linux上的C++数据类型大小/范围显示
- 2. SQL数据范围最小最大类别
- 3. 值的范围取决于数据类型的大小?
- 4. 对最小和最大范围的输入类型编号进行验证
- 5. famo.us输入表面类型范围最小/最大属性
- 6. 类型的保证大小为2?
- 7. C中数据类型的最小值和最大值
- 8. Java:最小和最大日期范围
- 9. 范围最小/最大查询
- 10. mvc4范围验证小数
- 11. 设置最小和最大范围相对于窗口大小
- 12. 验证范围,其中最小=最大的jQuery滑块
- 13. 范围验证器的最小值和最大值?
- 14. amCharts最小的变焦范围(最小周期选择范围)
- 15. C# - 类型大小
- 16. 是否可以创建具有最小和最大范围的浮点类型?
- 17. 范围越界大小4目标c
- 18. 如何允许输入类型编号在最小和最大范围之外
- 19. CSS3背景大小 - 我可以保证覆盖范围吗?
- 20. 返回最大价值混合数据类型的范围
- 21. Java中的最大数据类型范围值
- 22. 角rzslider:最大值和最小值,最大值;范围滑块
- 23. 数据库数据类型大小
- 24. Dynamodb数字数据类型的大小
- 25. 减少数据类型大小会导致索引超过最大大小?
- 26. postgresql中“TEXT”数据类型的最大大小
- 27. 大于和小于范围
- 28. CIImage大小范围零?
- 29. 伪范围最小查询
- 30. 最小范围3套
sizeof(variable); – 2013-02-11 15:24:55
这个问题不是重复的原因,应该重新打开。 – 2013-02-11 15:39:06
@Steven:http://en.wikipedia.org/wiki/C_data_types似乎有你所寻求的信息。 – 2013-02-11 15:40:56