gpt4 book ai didi

go - 在 Go 中分配大字符串的最快方法?

转载 作者:IT王子 更新时间:2023-10-29 01:50:44 25 4
gpt4 key购买 nike

我需要在 Go 中创建一个 1048577 个字符(1MB + 1 字节)的字符串。字符串的内容完全不重要。有没有一种方法可以直接分配它而无需连接或使用缓冲区?

此外,值得注意的是字符串的值不会改变。用于单元测试以验证太长的字符串会返回错误。

最佳答案

使用strings.Builder在不使用额外缓冲区的情况下分配字符串。

var b strings.Builder
b.Grow(1048577)
for i := 0; i < 1048577; i++ {
b.WriteByte(0)
}
s := b.String()

调用Grow方法分配一个容量为 1048577 的 slice 。WriteByte 调用将 slice 填充到容量。 String()方法使用 unsafe将该 slice 转换为字符串。

可以通过一次写入 N 个字节的 block 并在末尾填充单个字节来减少循环的成本。

如果你不反对使用 unsafe 包,那么使用这个:

p := make([]byte, 1048577)
s := *(*string)(unsafe.Pointer(&p))

如果您询问如何使用最简单的代码执行此操作,请使用以下代码:

s := string(make([]byte, 1048577)

此方法不符合问题中提出的要求。它使用额外的缓冲区而不是直接分配字符串。

关于go - 在 Go 中分配大字符串的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498930/

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