【发布时间】:2020-09-03 07:04:06
【问题描述】:
假设我们有多个 .c 文件,如 a.c、b.c、c.c、d.c ...等,然后我们根据这些文件和 main.c 创建一个共享库 sharedlib.so只使用一个函数让我们functionb() in b.c。
根据我对共享库的理解,每个共享库都有一个.text 部分,这个.text 部分包含其成员文件a.c、b.c、c.c、d.c 中的所有函数指令...ETC。所以即使main.c只使用一个函数,共享库也会被加载到内存中,因此整个.text部分都在内存中,而sharedlib.so的.text部分包含很多main.c没有的函数不要使用。
我的上述理解正确吗? (我了解使用共享库的好处,因为与静态库相比,内存中只有一个副本。所以一般来说,使用共享库更好)只是想仔细检查一下使用共享库是否会导致将不必要的东西复制到记忆。
【问题讨论】:
-
无论您使用多少共享库,都会加载整个共享库。使用情况取决于您是否完全控制共享库。如果您期待一个特定版本并且加载了不同的版本,它可能会或可能不会工作。有时,因为调用丢失或参数不同。
标签: c linux gcc dll dynamic-linking