【发布时间】:2013-07-10 19:54:50
【问题描述】:
我知道,当您使用 dlopen() 加载动态 C++ 库时,您可以获得指向该库中函数的指针,但是有没有办法有效地(性能很重要)怎么办?
我知道我可以在库中调用一个函数(在初始化库时),传递一个指向函数的指针数组,或者只是将指针全部单独发送给一个函数。 (虽然数组可能会更好,因为它允许我添加函数但不需要更新所有旧插件)
我不确定这是否有效,因为可能有数百个函数,将所有这些函数发送到 10 个库可能效率不高。
但我对动态库不是很有经验,所以我想知道你们是否知道这样做更好。
编辑:也许将所有这些函数放在一个类中,然后通过函数调用发送一个类指针?那行得通吗?
【问题讨论】:
-
获取函数指针的性能成本在总执行时间中占足够高的比例而值得担心是极不可能的。它甚至可能只是加载 dll 所需的 I/O 时间的一小部分。在知道自己有问题之前不要解决问题。
-
@MikeDunlavey 指针必须滚动并存储很多次,导致内存出现问题。
-
@sehe 其实我真的很想这样做,因为我很想学习更多关于 C++ 等的知识。
-
你真的认为存储一千个指针会有问题吗?即使是 640K 也足够了!
-
我不确定你为什么要这样做 - 库必须有一个它希望在任何使用该库的应用程序中找到的函数列表,这将极大地限制该库的用处。回调函数可能是更好的方法......
标签: c++ dynamic-loading