原文:從lua的c源碼了解lua棧結構和函數調用流程

因為實習需要用到lua所以最近在學習lua,在學習過程中我使用C 與lua做交互。正常來說,如果lua要調用C 的函數,C 需要返回一個整數,這個整數的值是這個C 函數需要返回給lua調用的值的個數。這樣的做法才是正確的,只是我突然間想了下,如果我返回一個不正確的值會怎樣呢 於是我這么做了,然后數據如預料之中變得很不正常。然后我又在想,為什么我返回不正確的值lua會得到這樣的數據呢。於是我開始了l ...

2019-05-03 23:14 0 559 推薦指數:

查看詳情

lua函數調用

一、問題 和C相比,Lua是一種限制比較松散的語言,這個在函數相關的處理中更加明顯。函數可以有多個參數,函數返回值可以被賦值給變量列表(Lua manual中的varlist),函數可以return表達式列表(Lua manual中的explist),這些其實也不是很混亂,問題在於 ...

Thu Mar 07 18:31:00 CST 2019 0 1646
Lua函數調用和協程中,的變化情況

Lua函數調用和協程中,的變化情況 1. lua_call / lua_pcall 對於這兩個函數,對棧底是沒有影響的——調用的時候,參數會被從中移除,當函數返 回的時候,其返回值會從函數處開始壓入,可以通過新的頂減去舊的頂得到返回值數 量 ...

Sat Oct 28 04:56:00 CST 2017 0 1622
lua調用C函數

Lua所用,這樣就不愁功能缺失了。 關於C調用Lua,前段時間已經寫過一篇短文了:《多語言協作與 ...

Mon May 27 02:11:00 CST 2013 3 7576
C調用Lua函數

我們先來看一個簡單的例子: functest.lua:   這其中最關鍵的是調用函數的使用,在C調用Lua函數的API主要由以下幾個: (1)void lua_call (lua_State *L, int nargs, int nresults);  函數調用 ...

Tue Jul 29 01:59:00 CST 2014 0 14173
Lua調用C函數

  Lua利用一個虛擬的堆棧來給C傳遞值或從C獲取值。每當Lua調用C函數,都會獲得一個新的堆棧,該堆棧初始包含所有的調用C函數所需要的參數值(Lua傳給C函數調用實參),並且C函數執行完畢后,會把返回值壓入這個Lua從中拿到C函數調用結果)。   於此相關的C API有幾個比較重要的定義 ...

Wed Jul 30 07:25:00 CST 2014 1 37585
還原Lua調用

Lua數據類型 類型 大類型 類型細分 _tt(類型) nil #define LUA_TNIL 0 空 0 布爾 #define LUA ...

Mon Jan 11 07:04:00 CST 2021 0 342
C語言函數調用(二)

5 函數調用約定 創建一個幀的最重要步驟是主調函數如何向中傳遞函數參數。主調函數必須精確存儲這些參數,以便被調函數能夠訪問到它們。函數通過選擇特定的調用約定,來表明其希望以特定方式接收參數。此外,當被調函數完成任務后,調用約定規定先前入的參數由主調函數還是被調函數負責清除 ...

Thu May 29 00:02:00 CST 2014 10 9333
C語言函數調用(一)

程序的執行過程可看作連續的函數調用。當一個函數執行完畢時,程序要回到調用指令的下一條指令(緊接call指令)處繼續執行。函數調用過程通常使用堆棧實現,每個用戶態進程對應一個調用結構(call stack)。編譯器使用堆棧傳遞函數參數、保存返回地址、臨時保存寄存器原有值(即函數調用 ...

Wed May 28 01:01:00 CST 2014 9 31887
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM