初级会员
  • 第 24542 位会员
  • ivila
  • ivila
  • 2018-10-31 18:36:09
  • Offline
  • 19 55

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #4 @liubaorui golang自带的呀,go build -gcflags="-S"就会输出对应的汇编。大学学计算机的基本都有汇编基础,看懂这些很正常吧😂
  • 两个函数都内联优化了,不过T1还有额外的优化,编译器看出来你其实用不到resp这个对象,所以初始化req后,直接调用req的值去比对了。 所以对于两个函数来说: 1,T0函数:初始化resp,初始化req,给req赋值,把req的值转移给resp,用resp的值做比较。 2,T1函数:初始化req,给req赋值,直接用req的值做比较。 在golang1.13上差距没那么大,应该是高版本的编译器有更多的优化吧。 ![image.png](https://static.golangjob.cn/220421/1d364ccd1300bbf528a9513a8d656727.png)
  • go build -gcflags "-N -l" test.go 你用这种方式编译出来结果就差不多了。 <br/> <br/> 如果你学过汇编,可以查看这几个编译结果的汇编代码。<br/> 1,golang开优化:go build -gcflags "-S" test.go<br/> 2,golang关优化:go build -gcflags "-S -N -l" test.go<br/> 3,c不开任何优化:gcc -S test.c<br/> 本质就是编译结果的优化程度不同而已,默认情况下的编译结果效果不好,JLT+JMP混合使用,其实只需要一个就好,编译结果的代码量又多又浪费。<br/><br/> 而且其实你的代码也证明了golang对于编译优化做的还是很基础,毕竟gcc只要一开优化,就会发现你的是无效代码,直接干掉了。<br/>
  • 协变和逆变,上网搜一下就知道了,为了代码的安全性,肯定是不能支持你这么干的,不然早晚出问题。 比如你外面是[]TestA,传入函数的时候支持签名[]InterfaceT,然后你函数里面把切片第三个元素改成TestB类型(which 也是InterfaceT)那外面的那个[]TestA是不是有问题?它第三个元素变成TestB了呀。所以你想要的这种行为是不可能支持的。
  • #1 @karl_zhao 搞清楚几个问题就好 1,math.Exp2返回的值是什么类型的 2,float64二进制下是怎么表示的?float64是不是有精度考虑,精度到多少