【发布时间】:2015-12-21 05:56:37
【问题描述】:
我看到了几个接近这个但不是具体答案的答案。
如果 size_t 设置为 64 位,则 2^64 大约是 18 个 quintillion 标准字符(通常是字节)作为 char* 数组的最大大小。如果除以 10^9 (GB),我们最终得到 18GB 作为内存中数组大小的最大理论值(如果可以购买 32GB 的笔记本电脑,那么也是真实的)限制.
18GB 真的是 64 位机器上 char 数组/字符串的限制,还是我在推理中遗漏了什么?
我正在上我的第一个真正的 CS 课程,所以如果我的理解有任何严重错误,请原谅。
编辑 对于任何阅读本文的人来说,我的数学似乎是错误的,所以请务必阅读下面的答案。具体来说,当我除以 10^9 时,这会将答案转换为 GB 单位,但这些 GB 中仍有 18 * 10^9。这相当于 18 艾字节。
【问题讨论】:
-
我强烈建议您购买一个新计算器。检查
SIZE_MAX。 -
(2^64 个地址)/(10^9 个地址/GB) = 1.8e10 GB...您最多有 18 万亿 GB 的存储空间,而不是 18万亿字节。这等于 18 艾字节。经常检查你的单位!
-
According to Google 2^64 字节 = 17179869184 gibibytes。正如@Olaf 所说,
SIZE_MAX确定了size_t的最大值。此外,在 C 中,char始终是一个字节。这个名字只是历史的不幸。 -
@Kninnug:只是补充一点,一个字节可能超过 8 位。
-
@Olaf 好点,虽然(目前)这在笔记本电脑中并不常见。
标签: c memory out-of-memory size-t