2010-08-28 81 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