是否可以通過向C中的malloc
函數分配一個指向內存地址的指針來訪問Lua中的堆內存的內容?lua中的堆內存訪問
我曾嘗試這樣的:
int *j=(int *)malloc(sizeof(int));
j[0]=5;
傳遞(j
作爲指針到Lua),則在存儲器位置的Lua訪問內容由指針指向j
。
是否可以通過向C中的malloc
函數分配一個指向內存地址的指針來訪問Lua中的堆內存的內容?lua中的堆內存訪問
我曾嘗試這樣的:
int *j=(int *)malloc(sizeof(int));
j[0]=5;
傳遞(j
作爲指針到Lua),則在存儲器位置的Lua訪問內容由指針指向j
。
沒有內置的支持。
您可以通過將malloc
的版本導出到Lua來創建自己的支持,該版本創建內存緩衝區作爲userdata,並提供適當的元方法以便於訪問內容。 (但用lua_newuserdata
代替malloc
。)
其中一些出現在Lua郵件列表中。例如,見
但不能被視爲兩個進程之間的共享內存,是不可能通過共享內存的概念,在兩個進程之間共享內存,以這種方式過程產生數據,另一個消耗數據。 「C」製片人和lua「消費者」。 – user2589882
@ user2589882是否可以在兩個進程之間共享堆內存實際上與lua無關。要在兩個不同的進程之間共享內存*,您必須使用提供的系統API,該系統API顯然是操作系統和平臺相關的或某種類型的IPC。當然,您可以爲它們創建綁定,以便lua訪問它。 – greatwolf
什麼你真的想要嗎?你的問題似乎在詢問將數據從C移動到Lua。您的意見建議您要在兩個獨立的進程之間共享內存。
如果你只是想用一些C與Lua,那麼你應該寫和擴展(並使用userdata來移動數據)。例如,如果你有一個用C語言編寫的庫,並且你想在Lua中使用它,你將需要用一個包裝庫的模塊來擴展Lua。這包括在Part IV of PIL。當使用擴展時,只有一個進程,因此內存很容易在C和Lua之間共享。
如果你真的需要在兩個進程之間共享數據,你需要找到適合你的某種IPC。使用套接字是一個明顯的選擇,因爲您可以使用LuaSocket。如果你想要一個pub/sub,那麼你可以嘗試LCM,它支持C和Lua。
爲什麼你想要或需要這樣做? – lhf
因爲我想編寫兩個模塊1:以'c'語言以所需的「結構」格式捕獲IP包,並使用malloc分配內存,並通過lua和c和2之間共享的堆棧將指針傳遞給lua:Lua模塊讀取該數據包並對其進行處理。 – user2589882
你可以簡單地使用字符串或表格。 Lua中的字符串包含任意的二進制數據。 – lhf