dlopen vs linking overhead

点点圈 提交于 2019-12-03 07:57:50

If the library is a shared object (ie some lib*.so file) compiled with gcc -Wall -fPIC -O2 and linked with gcc -shared then it is an ELF Position Independent Code shared library.

PIC is a bit more costly on 32 bits x86 -which has few registers- than on 64 bits x86-64 -which has some addressing mode facilitating PIC

It is the same (in steady state) performance wise if it is dlopen-ed or if it is dynamically linked. Because in both cases the real linking is done by the dynamic linker (e.g. ld-linux.so) sine libdl.so is basically a wrapper to the dynamic linker.

What matters performance wise when called is the code inside the lib*.so and it does not change if you dlopen it or if you link it.

Things could be slightly different if the library is statically linked lib*.a. You could even compile and link both the library and the program with the link time optimization ability of recent GCC compilers (compile and link with gcc -flto -Wall -O2)

Read Drepper's How to Write Shared Library paper and the Program Library HowTo and Levine's Linkers & Loaders book.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!