将函数指针保存在共享内存中

问题描述 投票:1回答:4

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

c linux
4个回答
2
投票

没有。

除非您以某种方式将代码加载到共享内存区域,否则导致代码在两个进程中的同一地址加载,否则函数指针将无效。


0
投票

除非你完全确定你在做什么,否则在共享内存段中保存函数指针对我来说听起来不错,你最终可能会访问一个你的进程没有特权的函数指针,并可能最终崩溃你的计划。


0
投票

无法保证将共享库加载到两个不同应用程序的同一地址。更糟糕的是,由于地址空间布局随机化,库可以加载到任何随机地址。因此,函数指针不是不变的,因此不能存储在任何地方。

作为解决方案,您可以在两个进程中创建一个包含所有可能回调的函数表,并将偏移存储到共享内存中的函数。当然,这些表应该完全相同。


-1
投票

不,不能共享函数指针,如果需要,你需要创建该函数的库并在你的进程中使用它

© www.soinside.com 2019 - 2024. All rights reserved.