2013-02-11 34 views
2

我发现这个问题的答案不尽相同,我知道必须有一个确定的答案。 C中四种主要数据类型的最小分配内存大小是多少? int,double,floatchar是我想到的。 signedunsigned类型是否以任何方式更改大小?C数据类型的最小保证大小/范围

+6

sizeof(variable); – 2013-02-11 15:24:55

+1

这个问题不是重复的原因,应该重新打开。 – 2013-02-11 15:39:06

+1

@Steven:http://en.wikipedia.org/wiki/C_data_types似乎有你所寻求的信息。 – 2013-02-11 15:40:56

回答

1

您可以使用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架构来决定。

+3

尺寸是特定于平台和编译器的尺寸。 – 2013-02-11 15:27:39

+0

@Toon - 是的,他仍然可以使用sizeof运算符来确定他们自己。 – 2013-02-11 15:29:45

+0

是的,sizeof是安全的。但固定值可能会令人困惑。 – 2013-02-11 15:30:37

2

只有char保证是1字节的标准。
其他类型具有实现定义的大小。

+1

的确,但请注意,1个字节可能不是八位字节。有些平台的字节宽度为32位。 – 2013-02-11 16:12:51

0

收件一点测试程序,并看到自己:

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)。符号不会影响大小,只能解释。

+1

'%zu',而不是'%d'。 'sizeof'返回'size_t',而不是'int'。 – 2013-02-11 15:32:13

+1

重要的是要注意,结果会根据您编译的平台而有所不同。我建议你把这个添加到你的答案中,Leor。 – junix 2013-02-11 16:51:16

2

签名或无符号类型是否以任何方式更改大小?

不,它只影响保存的数据范围。有关短数据类型(2个字节),请参见下面的示例。

  • 签署-32,768到+32,767
  • 无符号的0到65,535
0

这是一个很大的问题。我把你引用到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语言中最重要的新增功能之一。在此之前,编写跨平台代码非常困难。

6

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)。