c++ - 使用共享库代替静态库会影响内存使用吗?

标签 c++ fork dynamic-library

我正在链接 10 个静态库。

当我使用动态库时,我的二进制文件大小变小了。

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

但是我学长告诉我,使用共享库也会减少内存使用量?(当多个进程正在运行相同的可执行代码时。)

这个说法对吗?

他告诉我,因为库中不会使用重复的函数拷贝,所以内存使用量会更少。当您创建该进程的 n 个实例时。

当进程启动时,它会 fork 它的 10 个子进程。那么使用动态库代替静态库会减少总内存使用量吗?

最佳答案

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

但是,当动态库在不同 进程之间共享而不是同一进程的分支时,您可以保存的地方。因此,如果您使用与另一个进程相同的 glibc.so,这两个进程将共享 glibc.so 的物理页面,即使它们在其他方面是不相关的进程也是如此。

关于c++ - 使用共享库代替静态库会影响内存使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5202175/

相关文章:

perl - Parallel::ForkManager() 模块是否支持全局变量同步?

ios - 我们为什么要使用use_frameworks!在 CocoaPods 中?

Python C++ 包装器 : Convert multi-type struct to it's python representation (preferable dictionary)

xcode - Xcode 如何在 Debug模式下跟踪子进程?

c++ - 在 visual studio 2008 中关闭运行时检查

c++ - Fork() 调用 - 程序从未终止

c++ - 静态类成员在动态库中与主应用程序不同

c - 在我自己的过程中找到一个符号

c++ - C++中的动态嵌套?

c++ - C++ 打印除数函数的新功能