【问题标题】:Max length for a dynamic array in Delphi 64?Delphi 64中动态数组的最大长度?
【发布时间】:2014-04-09 13:56:25
【问题描述】:

我当前的问题与Max length for a dynamic array in Delphi? 有关。这个问题是在 2009 年 64 位编译器不可用时提出的。我正准备迁移到 Delphi XE2(或任何不可购买的版本)或 Lazarus,因为我需要 64 位支持。

我想知道 Delphi 64 位发生了什么变化(与动态数组最大长度有关)。我现在可以创建更大的数组吗?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    在现代 Delphi 中,动态数组长度为 NativeInt

    这意味着动态数组在理论上限制为 32 位代码中的 32 位长度和 64 位代码中的 64 位长度。当然,实际考虑意味着限制要低一些。但是,可以在 64 位代码中分配具有超过 232 个元素的动态数组。

    另一方面,对于所有体系结构,字符串的长度都受到 32 位的限制。据我了解,原因是根本不希望字符串包含如此大量的文本。并且字符串所依赖的许多文本支持库函数都使用 32 位长度。而数组用于更通用的计算,32 位的限制会大大降低它们在 64 位以下的效用。

    【讨论】:

    • 谢谢戴维斯。像往常一样非常及时的回答。
    • “据我了解,原因是字符串不应该包含如此大量的文本。”但它违反了“0,1,infinity”规则:en.wikipedia.org/wiki/Zero_one_infinity_rule我已经看到处理基因序列的生物学程序发现使用大于 2GB 的字符串非常有用。
    • @alcalde-确实。我有一台 32GB RAM 的 PC,但仍需要升级 RAM 来处理所有数据。
    • 遗传序列保存在 ASCII 字符串中(如果你想浪费一些 RAM,你也可以将它们保存在 Unicode 中)。它们是表示 DNA 核苷酸的字符 A、C、G、T 和表示不明确的碱基和蛋白质的其他字母字符。也 - 对于 Gap。
    • 1.我从没有说过。 DNA 是分子而不是计算机字符串:) 我说的是你需要更多的 4 个字符 (ACGT) 来表示 DNA 序列或蛋白质。请看一下 UIPAC 代码,你会看到。 2. 在低于 8 的位数上编码 DNA 会使事情变得非常缓慢。在许多情况下,您需要比较或组合两个 looooong 序列。在这种情况下,最好保持数据未打包(作为字节或 ANSI 字符串)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2018-03-16
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多