gpt4 book ai didi

c - 我应该缓存 dlsym 的返回值吗?

转载 作者:行者123 更新时间:2023-12-04 05:47:27 30 4
gpt4 key购买 nike

我正在使用 POSIX dlopen/dlsym API 在运行时加载动态库,然后按名称从这些库中调用函数。

存储 dlsym 的结果在性能方面是个好主意吗?某处?或者 dlsym 是否已经进行了自己的缓存,并且添加另一层是无用的甚至是有害的?函数可能会被调用很多很多次,但我并没有办法提前知道哪些函数,或者调用它们的频率。

谢谢!

最佳答案

dlsym函数不做任何缓存。它只是访问 ELF 符号表(使用它的哈希表,实现得不是很好)。

我认为您应该避免调用 dlsym多次使用相同的名称和库(例如数百万次)。

您可能会使用惰性技术:例如您的 dlsym 中使用的名称和库与 dlsym 一起调用(在您的某些结构或类中) -ed 函数指针,并调用 dlsym仅当该指针为空时。

您可能还想捕捉 dlsym尽快失败。

FWIW,您可以调用dlopendlsym很多时间。特别是,您可以拥有数十万个 dlopen -ed Linux 上的共享库,作为我的 manydl.c示例演示。但避免dlclose - 如果您仍然有一些 dlsym 的事件调用框架,则创建一个库-ed 函数里面。实际上,您可能永远不会调用 dlclose并且您的程序仍然可以工作(有轻微的进程地址空间泄漏)。

关于c - 我应该缓存 dlsym 的返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500079/

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