Go 调用C语言,动态链接后的执行速度是静态链接的3倍。好奇怪,求解

little_kid 发布于 2016/09/19 14:35
阅读 443
收藏 0

Go 调用C语言,动态链接后的执行速度是静态链接的3倍。好奇怪,求解

代码是相同的

RT

各位大牛有可能解惑的吗?


加载中
0
行者无疆在杭州
行者无疆在杭州
猜测:记得编译原理中有讲过,动态库加载的时候,需要映射一些虚拟地址,静态库不用。再加上GO语音调用C语言估计也是映射地址实现的,步骤更繁琐了。
little_kid
little_kid
重新编译了下,速度几乎差不多了
0
中山野鬼
中山野鬼
我不能肯定是否是这种情况。静态链接下,代码相对存储地址之间存在冲突。假设两个函数a,b在调入cache中会在一个区域,而a调用b,且频率高,则在a 调用b,和b返回a时,这个区域都存在从外部存储区再次载入代码的工作,这个是挺满的一项工作。 哈,一般出现这种情况需要在编译时,手工定义段。当然不知道如今的优化编译器是否具备这类检查工作。不过对于函数指针调用函数的方式,我想自动优化是不太可行的。
返回顶部
顶部