1

在 Windows 上,rebase 更改了 dll 的首选加载位置,并且(我已阅读)可以显着减少应用程序加载时间。Linux 和/或 gcc 上是否有类似的概念?

4

2 回答 2

1

根据我的经验,rebase 在 Windows 上并没有太大帮助。可能回到 dll 较小的那一天,它的帮助更大,但我认为您现在更有可能受到硬盘 i/o 性能的限制。

为了回答您的具体问题,Linux 上的共享库与 Windows 上的共享库完全不同。我不相信关于变基有任何类似的概念。您可以在此处阅读有关共享库和动态加载的更多信息

这是另一个链接Dynamic Linking,它解释了为什么只要您使用与位置无关的代码就不需要在 linux 上进行变基。在 Windows 中,这是不可用的,这意味着变基必须在运行时发生。应该注意的是,不能保证在 Windows 上重新定位对每个系统都有影响,只是在您运行程序时 dll 的默认基地址碰巧没有使用的系统上。

于 2009-09-14T19:01:48.220 回答
1

一些发行版带有预链接,它做类似的事情。正在慢慢采用的DT_GNU_HASH进一步加快了速度。

它扫描所有可执行文件和共享库,尝试确定和修改共享库的最佳加载地址,以避免加载时间重定位。加载时间重定位会减慢应用程序启动速度并使用更多内存 - 尽管“问题”比 Windows 小得多。

http://people.redhat.com/jakub/prelink.pdf告诉您预链接如何提供帮助。

于 2009-09-14T19:29:28.570 回答