gpt4 book ai didi

c++ - 加载的共享对象的内存使用情况

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:07 27 4
gpt4 key购买 nike

我正在开发一个基于 Linux 的程序,它以共享对象的形式加载许多插件。我想知道的是每个共享对象及其所有数据结构在某个时间点占用多少内存。有可能这样做吗?如果需要,我可以同时修改主程序和插件共享对象。

最佳答案

这不可能是动态的,因为共享对象 A.so 可能会在运行时动态创建一些对象数据 B,该对象数据 B 被使用然后被共享对象 C.so 销毁所以你不能说像 B 这样的数据“属于”一个特定的共享对象;您可能(并且应该)对此有约定。参见 RAII , rule of three , smart pointers , ....

问题是“给定的库或共享对象使用了多少内存”这个问题毫无意义。内存和地址空间对于进程来说是全局的,因此由主程序和所有共享对象、库、插件...共享!

但是您可以使用 proc(5)获取有关整个过程的信息。从程序内部,顺序读取 /proc/self/maps 以获取其地址空间的映射。从程序外部,读取 pid 1234 的进程的 /proc/1234/maps

您可能想使用 valgrind .阅读更多关于 memory management 的信息, garbage collection , reference counting .您可以查看与 resource management 有关的问题或 garbage collection .您可能想使用 Boehm's conservative garbage collector (如果使用标准 C++ 容器,您需要使用 Boehm gc_allocator,请参阅 this)。重点是某些给定数据的活跃度是程序的全局属性,而不是任何特定插件或函数的属性。想想circular references

关于c++ - 加载的共享对象的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607376/

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