翻譯 關於Evaluation Stack

2022-07-01 10:39:07 字數 1320 閱讀 3655

由於沒想到合適的 evaluation stack 對應的中文,索性就不給它中文名了。

evaluation stack 是基於 msil 應用程式(c#、f#、vb.net 語言應用)的關鍵結構,它是應用程式 和 記憶體之間的橋梁。

它跟普通的棧有一些關鍵性的區別。

你的應用程式 可以通過 使用 evaluation stack ,去訪問 函式引數、區域性變數、臨時物件等。

通常,函式引數和區域性變數 是存在記憶體【棧】上的,但是你的函式 卻不能直接訪問這些資訊。想訪問這些資料,必須使用 load 命令,把它們從記憶體 移動到 evaluation stack 的 slot(槽,4位元組或8位元組的單元)上;反過來,可以用(store命令)更新evaluation stack上的 區域性變數或引數。

evaluation stack 是個棧,因此,也遵循 先進後出(lifo)的原則。 當函式開始的時候,evaluation stack是空的。 隨著函式的執行,會向evaluation stack裡面增刪元素。在函式退出前,除有返回值的情況外,evaluation stack必須是空。jmp、tail命令是這個規則的例外。如果函式退出時evaluation stack不為空,clr會丟擲invalidprogramexception 異常。

.maxstack 是用來限制 evaluation stack 大小的命令,是可選的。如果沒有寫,預設evaluation stack 提供8個slot。.maxstack 用來確保應用如預期的執行。如果執行時,evaluation stack的長度 超過了.maxstack 指定的長度,則可能代表著 程式收到了潛在的邏輯問題 或者安全風險。不管如何,這種情況都值得提醒使用者。

簡言之,evaluation stack就是 函式 和 記憶體間的橋梁。

以下不是翻譯:

以乙個簡單的函式為例:

public

int add(int fact1, int

fact2)

編譯後的il,可以看出函式的一般「套路」:對引數、返回值、區域性變數的讀寫,就是在操作 evaluation stack。

//

方法.method

public

hidebysig

instance

int32

add(

int32

fact1,

int32

fact2

) cilmanaged //

方法 helloworld::add 結束

關於技術文件的翻譯

最近有人與我 有沒有必要把時間花在技術文件的翻譯上面,我個人覺得是非常有必要的,理由如下 1 提高英文的閱讀能力和對單詞的理解能力。翻譯有個特點,就是要字斟句酌。所以翻譯即是精讀。你不會漏過任何一段文字,你會注意到很多詞在不同地方的用法,這對提高你的英文水平是很有幫助的。所以我覺得學好英語有兩點 一...

翻譯 Swift程式語言 關於Swift

swift是一門用於ios和os x應用開發的新的程式語言,它以c和objective c語言為基礎,但沒有c語言的相容性約束。swift採用了安全的程式設計模式並且新增了能夠讓程式設計更加簡單 靈活和富有樂趣的現代化特性。swift是白紙一張,再加上有成熟而且深受喜愛的cocoa和cocoatou...

關於翻譯的CountZero的設想

威廉 吉布森 william ford gibson 的矩陣三部曲 matrix trilogy neuromancer count zero mona lisa overdrive是 電腦朋克 cyberpunk 類科幻 的開山之作,其歷史地位無人可望其項背。特別是深受其影響的電影大片 黑客帝國m...