gpt4 book ai didi

memory-management - 为什么要在 rebol 中分配一个变量?

转载 作者:行者123 更新时间:2023-12-02 07:03:42 25 4
gpt4 key购买 nike

我在一些 Rebol 代码中发现了这样一行:

dups: make block! 10000

为什么要在 Rebol 中使用预分配?

只写有什么问题:

dups: copy []

最佳答案

第一件事:在 Rebol 中你没有“分配一个变量”,你“预分配了一个系列缓冲区”(它恰好在你的代码示例中被一个词引用,但它可能只是位于一个 block 中).

快速回答:每次您将数据插入或追加到一个系列时,如果系列缓冲区已满,内存管理器将重新分配该系列到一个更大的缓冲区。如果你多次扩展一个系列(比如在一个循环中将数据附加到系列),如果你不预先分配,你可能最终会为所有重新分配消耗大量额外的内存,并且可能在某个时候,也会触发垃圾收集器通行证。这通常会导致程序执行速度大幅下降并消耗大量额外内存。将系列缓冲区预分配到足够大的大小以容纳所有最终数据,将避免所有这些内存和性能问题。

dups: copy [] 的情况下,您正在分配一个最小的系列缓冲区(大小可能为 8 或 16 个插槽),因此如果您的所有数据不适合此缓冲区,您的程序将支付重新分配的(沉重)成本。此外,[] 是一个预分配的最小大小的文字系列,您只是将其用作构建新系列的模板,因此最好避免白白浪费内存,而是编写:dups:做 block ! 0 这将分配一个 block !系列最小尺寸,不浪费额外的 block !系列。

关于memory-management - 为什么要在 rebol 中分配一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com