gpt4 book ai didi

bool 与 int 数组的性能

转载 作者:IT王子 更新时间:2023-10-29 02:32:27 24 4
gpt4 key购买 nike

在玩 Go 中的一些简单代码时,我注意到使用 bool 数组而不是 int 数组(它只使用 0/1 的值)有非常显着的加速。

  • funcUsingBool - 1.397s
  • funcUsingInt - 1.996s

我原以为它们都能提供相同的性能,因为在机器级别没有原生 bool 类型,所以我原以为编译器会生成类似的汇编代码。

由于差异很大,我对这个结果的有效性持怀疑态度。

我正在使用命令“go build filename.go”进行构建,但我不确定 gcc 的“-O3”的等效标志是什么。

func funcUsingBool(n int) int {
if n < 1 { return 0 }

notPrime := make([]bool, n+1)
count := 1
for i := 3; i < n; i = i + 2 {
if notPrime[i] { continue }
count++
k := 2 * i
for k <= n {
notPrime[k] = true
k += i
}
}
return count
}

func funcUsingInt(n int) int {
if n < 1 { return 0}

notPrime := make([]int, n+1)
count := 1
for i := 3; i < n; i = i + 2 {
if notPrime[i] == 1 { continue }
count++
k := 2 * i
for k <= n {
notPrime[k] = 1
k += i
}
}
return count
}

最佳答案

查看汇编输出(go run -gcflags '-S' test.go)有一些不同:

bool :

0x0075 00117 (test.go:11)   MOVBLZX (AX)(BX*1), DI
0x0079 00121 (test.go:11) TESTB DIB, DIB

内部:

0x0075 00117 (test.go:28)   MOVQ    (AX)(BX*8), DI
0x0079 00121 (test.go:28) CMPQ DI, $1

字节/uint8:

0x0075 00117 (test.go:28)   MOVBLZX (AX)(BX*1), DI
0x0079 00121 (test.go:28) CMPB DIB, $1

其余的程序集对我来说在 Go 1.8.* 上几乎相同。

所以:1)数据类型的大小不同 2)操作不同

关于bool 与 int 数组的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44848595/

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