2010-08-28 30 views
1

什麼類型的變量可以包含1,000,000,000(十進制數)佔用最多的內存空間?可以包含大部分內存空間的變量?

  1. 用C INT
  2. 串用C
  3. 字符串中的Java(其中使用Unicode)
+9

作業AC執行? _____ – kennytm 2010-08-28 10:48:20

+0

奇怪的問題?最浪費的代表將是一個unicode字符串,假設在C中使用字符串char [] – StuartLC 2010-08-28 10:50:55

+0

C中的字符串也可以是unicode ... – 2010-08-28 10:57:38

回答

3

Java字符串。底層Java String由一個包含3個字段的對象組成,其中一個指向包含字符的單獨數組對象。另外當然,Java字符串由16位字符組成。

如果您擔心所有其他標準的內存使用情況,請勿使用Java。但對於大多數應用程序而言,內存使用率是您最擔心的問題。

值得注意的是,1,000,000,000可以用Java int來表示,它將與C有符號或無符號(32位)整數大小相同。

此外,一個C int不一定大到足以代表1,000,000,000。在某些平臺上,int是16位,這是C標準允許的。

+1

Y - 爲了澄清,C將int定義爲本地機器字大小(因此int可以是16,32或64位等)。我想技術上來說C int可能是1Bbit在512bit機器語言場景中效率最低的存儲器,但希望我不會看到這一點。 – StuartLC 2010-08-28 11:08:00

+3

@nonnb - 在技術上絕對正確,C標準說'int'的範圍至少是-32758到+32767。它可以(而且往往)比這更大。然而,標準說*絕對沒有*關於'int'與「本地機器字」大小相同。 – 2010-08-28 11:19:51

1

C標準沒有說明許多存儲要求。正因爲如此,你可以有:

  • 256位C int s表示需要32個字節來存儲任何東西(見@ nonnb的評論)
  • 寬C字符串(wchar_t[])使用UCS-4/UTF -32字符(因爲所有的GNU實現做,顯然)
  • 使用32位char秒(這將必須在系統上使用32位字節)
+0

順便說一句,21位或更大的'wchar_t'是符合C實現可以支持所有Unicode的唯一方法。這也是推薦的方法(請參閱C99中的__STDC_ISO_10646__宏)。具有16位'wchar_t'的實現簡單地被破壞了。 – 2010-08-28 11:45:52

+0

多字符序列呢?那麼UTF-8和16呢? – aib 2010-08-29 10:36:49