Go 调用C语言,动态链接后的执行速度是静态链接的3倍。好奇怪,求解
Go 调用C语言,动态链接后的执行速度是静态链接的3倍。好奇怪,求解
代码是相同的
RT
各位大牛有可能解惑的吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Go 调用C语言,动态链接后的执行速度是静态链接的3倍。好奇怪,求解
代码是相同的
RT
各位大牛有可能解惑的吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
我不能肯定是否是这种情况。静态链接下,代码相对存储地址之间存在冲突。假设两个函数a,b在调入cache中会在一个区域,而a调用b,且频率高,则在a 调用b,和b返回a时,这个区域都存在从外部存储区再次载入代码的工作,这个是挺满的一项工作。 哈,一般出现这种情况需要在编译时,手工定义段。当然不知道如今的优化编译器是否具备这类检查工作。不过对于函数指针调用函数的方式,我想自动优化是不太可行的。
重新编译了下,速度几乎差不多了
猜测:记得编译原理中有讲过,动态库加载的时候,需要映射一些虚拟地址,静态库不用。再加上GO语音调用C语言估计也是映射地址实现的,步骤更繁琐了。