是否会使用共享库代替静态库影响内存使用?

Viv*_*oel 2 c++ fork dynamic-library

我正在链接10个静态库.

当我使用动态库时,我的二进制文件大小正在减少.

据我所知,使用动态库不会减少内存使用量.

但我的大四学生告诉我,使用共享库也会减少内存使用量?(当多个进程针对相同的可执行代码运行时.)

这个说法是对的吗?

他告诉我,因为库中没有复制的函数副本,所以内存使用量会减少.当您创建该进程的n个实例时.

当这个过程开始时它就是10个孩子.那么使用动态库代替静态库会减少总内存使用量吗?

Don*_*eld 8

在您的示例中,动态库不会为您节省太多.当您在现代操作系统上分叉流程时,所有页面都会在写入时标记为复制而不是实际复制.因此,您的静态库已经在您的10个流程副本之间共享.

但是,您可以保存的位置是在不同进程之间共享动态库而不是同一进程的分支.因此,如果你使用相同的glibc.so作为另一个进程,这两个进程正在共享glibc.so的物理页面,即使它们是不相关的进程.