gpt4 book ai didi

memory-management - bytes.Buffer 是否执行大量重新分配?

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:03 24 4
gpt4 key购买 nike

我想做的是有一个 io.MultiWriter 写入标准输出和字节缓冲区。像这样:

package main

import "bytes"
import "fmt"
import "io"
import "os"

func main() {
var b bytes.Buffer
multi := io.MultiWriter(&b, os.Stdout)
fmt.Fprintf(multi, "each of these strings\n")
fmt.Fprintf(multi, "might be large\n")
fmt.Fprintf(multi, "and there are many of them\n")
fmt.Println(b.String())
}

我想知道这样做是不是搬起石头砸自己的脚?这是否会为每次插入数组重新分配数组?如果是这样,也许有更好的方法?我是否过早优化了?

最佳答案

这将是写入字节缓冲区的标准方法。

bytes.Buffer 类型的增长类似于 slice 。因此,每次进入缓冲区的数据超过当前字节 slice 的容量时,缓冲区(内部是字节 slice )都会加倍。然后将旧 slice 中的数据复制到这个新 slice ,然后将新数据附加到它。

此算法平均在恒定时间内执行(摊销),因此没有重大的性能损失。

关于memory-management - bytes.Buffer 是否执行大量重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356480/

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