text: marshalling可譯作集結、結集、編碼、編組、編集、安整、資料打包、列集等，是計算機科學中把一個物件的記憶體表示變換為適合儲存或傳送的資料格式的過程。典型用於資料必須在一個程式的兩個部分之間移動，或者必須從一個程式移動到另一個程式。Marshalling類似於序列化，可用於一個物件與一個遠端物件通訊。逆過程被稱作unmarshalling。用途.Marshalling被用於實現不同的遠端過程呼叫機制，這必須用到程序間的資料傳輸。stub必須把程式記憶體空間的本地格式的資料轉換為格式(NDR，常稱為資料的線上格式)，這種轉換被稱為marshaling資料。當客戶端或伺服器接受資料，必須從NDR格式把資料轉換為程式的本地格式，這稱為unmarshaling資料。Microsoft的元件物件模型型別與CLR型別間，例如P/Invoke過程，必須做marshalling。例如，C#程式呼叫C語言寫的DLL，其中函式引數使用字串，就需要做marshalling。使用Mozilla應用程式框架的XPCOM的指令碼或應用程式，廣泛使用marshalling。例子.Microsoft Windows系列作業系統，Direct3D裝置驅動程式是核心態驅動程式。DirectX執行時處理使用者態API。使用者態執行系統呼叫來執行核心態操作，需要CPU切換為核心態，這將耗費微秒級的時間來完成。在此期間，CPU不能執行任何操作。為最佳化效能，必須極小化CPU這種模式切換。 Linux OpenGL驅動程式分為兩部分：核心驅動與使用者空間驅動。使用者空間驅動把所有OpenGL命令翻譯為機器碼提交給GPU。為減少系統呼叫，使用者空間驅動實現marshalling。當GPU的命令緩衝區裝滿了繪圖資料，API簡單地把請求繪製的呼叫存放在一個臨時緩衝區；當命令緩衝區接近為空，執行核心模式切換一次性增加被儲存的命令。與序列化的比較.序列化一個物件意味著把它的狀態轉化為位元組流，使這個位元組流能反向轉化為該物件的一個副本。術語“marshal”被Python標準庫認為與“序列化”同義。 但與Java相關的RFC 2713不認為二者是同義："marshal"一個物件意味著記錄下它的狀態與codebase(s)[note 1]在這種方式，以便當這個marshal物件在被"unmarshalled"時，可以獲得最初程式碼的一個副本，可能會自動裝入這個物件的類定義。可以marshal任何能被序列化或遠端。Marshalling類似序列化，除了marshalling也記錄codebases。Marshalling不同於序列化是marshalling特別處理遠端物件。
metadata: erhwenkuo/wikipedia-zhtw
metadata: Marshalling (計算機科學)
metadata: https://zh.wikipedia.org/wiki?curid=6024405