gpt4 book ai didi

c++ - 来自c++中动态加载库的指针

转载 作者:太空狗 更新时间:2023-10-29 20:55:54 24 4
gpt4 key购买 nike

我知道动态加载的库共享相同的地址空间,但我不确定在动态加载的库中分配内存并关闭该库时会发生什么。当对象不是加载库的一部分时,分配的对象是否仍然有效?例如一个简单的 std::string 或我的任何类?

最佳答案

(我站在 Linux 的角度;C++14 标准不知道动态加载库)

只有一个单heap (和一个 virtual address space )用于整个 process运行你的 C++ 程序。因此在底层,一个内存区域可以从一个库 lib1.so 中分配,并从另一个库 lib2.so 中释放 - 在同一个进程中。

您可以让多个进程使用相同共享库;然后是文本或 code segment该库的一部分在多个进程之间有效共享(但不是数据段)。

剩下的就是编程约定。五的规则(以前是 rule of three )在 C++ 中是一个非常有用的约定

在内部,mmap(2)被使用,地址空间可以通过/proc/$PID/maps查看(参见proc(5))。因此,对于 pid 1234 的进程,请尝试在终端中运行 cat/proc/1234/maps,您将更多地了解共享库是如何加载到该进程的虚拟地址空间中的。

关于c++ - 来自c++中动态加载库的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com