2017-12-27 171 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

它不能保證共享庫將被裝載到同一個地址兩種不同的應用。事件更糟糕的是,由於地址空間佈局隨機化,圖書館可能被加載到任何隨機地址。因此,函數指針不是不變的,因此不能存儲在任何地方。

作爲解決方案,您可以在兩個進程中創建一個包含所有可能的回調的函數表,並在共享內存中存儲偏移量。當然,那些表應該是,確切地說一樣。