我目前正在实施基于嵌入式Linux的系统。持久数据从NAND闪存加载。 userland中的第一个应用程序之一是使用libglib的一些功能。对于系统,低启动时间非常重要。
因为glib很大且NAND很慢,所以很多人认为开始速度变慢,因为整个glib必须加载到RAM!我不相信这个“都市传奇”。 我的观点是:
我的假设是否正确,是否有人引用了描述共享对象加载的文本(不是使用GOT进行符号解析,而是“加载”到RAM中)?
非常感谢提前!
祝你好运 让 - 皮埃尔
答案 0 :(得分:1)
我的观点是:
gcc链接器支持延迟加载
没有“gcc linker”这样的东西,而(静态)链接器与任何东西都没有关系。
共享库的处理方式与内存映射文件类似。因此,整个库不会加载到RAM中,而只会在访问它们时加载包含符号的部分。
这是正确的:Linux将从“磁盘”请求分页,因此如果您的磁盘实际上是闪存,并且您不使用压缩文件系统,并且您的共享库是正确构建的,没有文本重定位({{ 1}}),然后只有引用的代码部分和来自库的数据将被分页到RAM中。