2013-02-11 91 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)。