【问题标题】:How did I store a BIGINT number in a 32-bit OS如何在 32 位操作系统中存储 BIGINT 数字
【发布时间】:2017-02-03 13:01:50
【问题描述】:

我在带有 32 位 PIXEL OS(Raspbian 版本)的树莓派 3(64 位 SoC)上运行 LAMP 堆栈。 我在 MySQL 中创建了一个新表,并将主键设置为无符号 BIGINT(20)。最初我认为数据库只会截断溢出的数字或其他东西,但它实际上可以存储超过约 40 亿的数字。更准确地说,我存储了数字 5201702020。 这怎么可能?

【问题讨论】:

  • 这是可能的,因为当一切都是 32 位时,人们说“嗯,我需要存储一个非常大的数字,所以我会构建它来处理它”。您肯定不认为在 1980 年代没有人必须处理大量数字吗? superuser.com/questions/698312/…
  • BIGINT 存储在 8 个字节中。不管是32位还是64位系统。
  • 可能 MySQL 使用多个内存位置来存储数字...现在想想,它是如何存储超过 4 个字节的字符串的???

标签: mysql 32-bit bigint


【解决方案1】:

查看 MySQL 源代码,我发现至少有 4 处对 BIGINT 的引用:

1) “大整数”:

查询“PARS_BIGINT_TOKEN”:

2) 作为结构体:

3) 在很多地方都使用 int64_t 或 uint64_t

4) Java 语言类型,在所有 java 文件中。

并且,回答你的问题:

情况(1)和(2)将由源代码实现/逻辑处理。

情况(3)将由编译器处理,而不是操作系统。编译器将对 BigInt 变量和值进行所有必要的转换以完成这项工作。

情况 (4) 将由 JVM 处理,而不是像编译器那样由操作系统处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2011-02-20
    • 2020-02-04
    • 2013-10-31
    • 1970-01-01
    • 2010-09-07
    • 2013-09-18
    • 2015-09-26
    相关资源
    最近更新 更多