开发者

Will using shared library in place of static library effect memory usage?

I am linking against 10 static library.

My binary file size is getting reduced when I am using dynamic library.

As I know using dynamic library will not reduce memory usage.

But my senior told me that using shared library will also reduce memory usage ? (when multiple process are running for the same executable code. )

Is that statement is right ?

he told me that as there will no duplicate copy of function used in library , so memory usage will be less. when y开发者_Python百科ou create n instance of that process.

When the process start it fork it's 10 children. So will using dynamic library in place of static library reduce total memory usages ?


In your example, dynamic libraries won't save you much. When you fork your process on a modern OS all the pages are marked copy on write rather than actually copied. So your static library is already shared between your 10 copies of your process.

However, where you can save is when the dynamic library is shared between different processes rather than forks of the same process. So if you're using the same glibc.so as another process, the two processes are sharing the physical pages of glibc.so, even though they are otherwise unrelated processes.


If you fork given process there shouldn't be much of a difference, because most operating systems use copy-on-write. This means that pages will only be copied if they're updated, so things like the code segments in shared libraries shouldn't be affected.

On the other hand different processes won't be able to share code if they're statically linked. Consider libc, which practically every binary links against... if they were all statically linked you'd end up with dozens of copies of printf in memory.

The bottom line is you shouldn't link your binaries statically unless you have an excellent reason for it.


Your senior in this instance is correct. A single copy of the shared library will be loaded into memory and will be used by every program that references it.

There is a post regarding this topic here:

http://www.linuxquestions.org/linux/articles/Technical/Understanding_memory_usage_on_Linux

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜