2017-12-27 145 views
1

我知道数据可以被多个应用程序使用共享内存保存和使用。我想知道是否有可能将函数指针保存在共享内存中?我的目的是拨打电话从我的共享对象返回到具有相同返回值和不同应用程序参数的函数。将函数指针保存在共享内存中

+0

[指针内部共享内存段]可能重复(https://stackoverflow.com/questions/10776762/pointers-inside-shared-memory-segment) – Aravind

+2

可能重复[是否有可能跨过程使用函数指针?](https://stackoverflow.com/questions/1561620/is-it-possible-to-use-function-pointers-across-processes) – Marc

+0

@Aravind关于数据,而不是函数指针。 –

回答

2

除非你以某种方式加载代码到共享内存区域,或以其他方式导致在这两个过程在同一地址加载代码号,函数指针将是无效的。

+0

我有我的共享对象访问所有应用程序。但每个应用程序都获得我的.so库的不同实例 – Black

+0

确切地说 - ld.so并不能保证程序/库将在哪里加载进程。我认为你应该重新考虑你的设计。 –

+0

绝对我会考虑你的建议。我需要将来自ex.so的数据广播/多播到app1,app2和app3。你能提出一个更好的方法来实现吗? – Black

0

除非您完全确定自己在做什么,否则在共享内存段中保存函数指针听起来是一个糟糕的主意,您最终可能会访问您的进程没有权限的函数指针,并且可能会最终导致你的程序崩溃。

-1

没有,不能共享的函数指针,如果你愿意,u需要使该函数库,并用它在你的进程

0

它不能保证共享库将被装载到同一个地址两种不同的应用。事件更糟糕的是,由于地址空间布局随机化,图书馆可能被加载到任何随机地址。因此,函数指针不是不变的,因此不能存储在任何地方。

作为解决方案,您可以在两个进程中创建一个包含所有可能的回调的函数表,并在共享内存中存储偏移量。当然,那些表应该是,确切地说一样。