为了账号安全,请及时绑定邮箱和手机立即绑定

go中是否有memset的模拟?

go中是否有memset的模拟?

Go
白猪掌柜的 2021-10-11 10:55:40
在 C++ 中,我可以使用memset用一些值初始化一个数组:const int MAX = 1000000;int is_prime[MAX]memset(is_prime, 1, sizeof(is_prime))memset 所做的,粗略地可以描述为用一些值填充数组,但这样做真的非常快。在 go 中我可以做is_prime := make([]int, 1000000),但这将创建一个全为 0 的切片,以我可以使用的类似方式new([1000000]int),但没有任何东西允许我创建一个全为 1 或任何其他非零元素的数组/切片。当然,我可以稍后使用循环用该值填充它,但主要目的memset是它比循环快得多。那么 Go 程序员是否有memset模拟(将数组初始化为某个非零值的快速方法)?
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

根据这个标题为“优化 memset idiom”的错误,除了循环之外,在 Go 中没有办法做到这一点。该问题已于 2013 年 1 月 9 日通过此帖子关闭


我认为这是固定的。优化非零情况并不是很有趣。


如果人们强烈希望做得更多,我们可以打开另一个错误。


因此,解决方案是使用 icza 已经涵盖的循环。


有bytes.Repeat但也只使用了一个循环:


func Repeat(b []byte, count int) []byte {

    nb := make([]byte, len(b)*count)

    bp := copy(nb, b)

    for bp < len(nb) {

        copy(nb[bp:], nb[:bp])

        bp *= 2

    }

    return nb

}


查看完整回答
反对 回复 2021-10-11
  • 2 回答
  • 0 关注
  • 454 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信