Max*_*axV 2 memory-management rebol
我在一些Rebol代码中找到了这样的一行:
dups: make block! 10000
Run Code Online (Sandbox Code Playgroud)
你为什么要在Rebol中使用预分配?
写作有什么不对:
dups: copy []
Run Code Online (Sandbox Code Playgroud)
第一件事:你没有在Rebol中"分配一个变量",你"预先分配一个系列缓冲区"(恰好在你的代码示例中由一个单词引用,但它可能只是在一个块中).
快速回答:每次向一系列插入或附加数据时,如果系列缓冲区已满,则系列将由内存管理器重新分配给更大的系列.如果你多次扩展一个系列(比如在循环中将数据附加到系列中),如果你没有预先分配,你最终可能会为所有的重新分配消耗大量的额外内存,并且可能在某些时候,还会触发垃圾收集器通行证.这通常会导致程序执行速度大幅下降,并消耗大量额外内存.将串行缓冲区预分配到足够大的大小以容纳所有最终数据,将避免所有这些内存和性能问题.
在这种情况下dups: copy [],您正在分配一个最小系列缓冲区(大小可能是8或16个插槽),因此如果您的所有数据都不适合此缓冲区,您的程序将支付(重)重新分配的成本( S).也是[]一个预先分配的最小尺寸的文字系列,你只是用它作为模板来构建一个新的系列,所以最好避免浪费内存,而不是编写代码:dups: make block! 0这将分配一个块!系列最小尺寸,不浪费额外的块!系列.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |