golang性能优化笔记(二)

本文记录了对一个Golang库的性能优化过程,包括使用Benchmark测试、减少指针和类型转化、理解栈的运作以及通过特殊值优化计算。优化措施包括避免不必要的类型转化,减少函数调用,以及利用位运算优化乘法操作,从而提升代码运行效率。
摘要由CSDN通过智能技术生成

背景

基于前次的文章,继续对这个库进行力所能及的优化。
现在,我们对于golang优化的基础有了一些基础的理解。
比如:

  1. 结合benchmark与pprof
  2. 清理了代码中出现的重复逻辑
  3. 初步探索了栈与指针对于内存和性能的影响

我们继续来对代码进行优化,具体方法如下:

Benchmark

首先,为了更好的理解我们之前的结果,很体力活的为每个函数都加了Benchmark测试。

指针转化

BenchmarkSm2P256FromBig-16                       3303530               361 ns/op             128 B/op          2 allocs/op
BenchmarkSm2P256ToBig-16                         6051643               199 ns/op              32 B/op          1 allocs/op

这里我们发现反复的指针和类型转化会在代码中消耗很多内存,cpu操作,时间。因此第一步我们把非必要的类型转化都避免了。
before

func somefunc(a type a) type b{
	Ia = convert(a)
	Ia.add
	....
	return convert'(Ia)
}

after

func somefunc(a type a) type b{
     ...
	return a.add
}

另外一种是通过特殊值做等效处理。 比如代码中有指针转换后,转化后的对象调用equals 的函数。
我们可以进行逻辑等效转化
before

return covert(A).Equals(covert(B))

after

return A - B == 0

栈(一)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值