Marshalling (计算机科学)

✍ dations ◷ 2025-12-07 14:22:30 #Marshalling (计算机科学)

marshalling可译作集结、结集、编码、编组、编集、安整、数据打包、列集等,是计算机科学中把一个对象的内存表示变换为适合存储或发送的数据格式的过程。典型用于数据必须在一个程序的两个部分之间移动,或者必须从一个程序移动到另一个程序。Marshalling类似于序列化,可用于一个对象与一个远程对象通信。逆过程被称作unmarshalling。

Marshalling被用于实现不同的远程过程调用(RPC)机制,这必须用到进程间的数据传输。stub必须把程序内存空间的本地格式的数据转换为网络数据表示(英语:Network Data Representation)格式(NDR,常称为数据的线上格式),这种转换被称为marshaling数据。当客户端或服务器接受数据,必须从NDR格式把数据转换为程序的本地格式,这称为unmarshaling数据。

Microsoft的组件对象模型(COM)中,当跨COM的套间(apartment)传递接口指针时,接口指针必须被marshalled。在.NET Framework下,在非受管(unmanaged)类型与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的命令缓冲区(command buffer)装满了绘图数据,API简单地把请求绘制的调用存放在一个临时缓冲区;当命令缓冲区接近为空,执行内核模式切换一次性增加被存储的命令。

序列化一个对象意味着把它的状态转化为字节流,使这个字节流能反向转化为该对象的一个副本。

术语“marshal”被Python标准库认为与“序列化”同义。 但与Java相关的RFC 2713不认为二者是同义:

"marshal"一个对象意味着记录下它的状态与codebase(s)在这种方式,以便当这个marshal对象在被"unmarshalled"时,可以获得最初代码的一个副本,可能会自动装入这个对象的类定义。可以marshal任何能被序列化或远程(即实现java.rmi.Remote接口)。Marshalling类似序列化,除了marshalling也记录codebases。Marshalling不同于序列化是marshalling特别处理远程对象。

相关

  • 高雄市日治时期建筑列表此列表列出台湾高雄市日治时期的建筑。
  • 白云索道白云索道,又称“白云山索道”,位于中国广东省广州市白云区白云山风景名胜区内,于1984年4月动工兴建,1986年2月建成通车,是中国大陆第一条自行设计、建造的单线循环、双钳口开合式
  • 盎叶记《盎叶记》(韩语:앙엽기)为朝鲜半岛的历史杂记,李德懋(号“青庄公”)所著,收录于《青庄馆全书》(청장관전서)第三辑的第54卷(제54권)内,全书共分八卷,于朝鲜王朝后期成书。
  • 西蒙·亨肖西蒙·亨肖(英语:Simon Henshaw,1960年10月7日-2020年6月9日),美国外交官,驻几内亚大使。会说英语、法语、西班牙语,基础俄语和基础葡萄牙语。1960年生于英格兰,1965年移居美国,1967年
  • 博赫纳公式在微分几何中,博赫纳公式是将黎曼流形 ( M , g ) {\displaystyle (M,g)} 上的调和函数与里奇曲率张量联系
  • 第八届全国残疾人运动会中华人民共和国第八届残疾人运动会于2011年10月11日在杭州、嘉兴、绍兴三个赛区举行。本届残运会是历届全国残疾人运动会中规模最大、人数最多的一次。会徽整体图案形将运动
  • 艾格维沃 (奥德省)艾格维沃(法语:Aigues-Vives,法语:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gentium Alternative","TITUS Cyberbit Basic","Arial Unicode MS","IPAPANNEW","Chrysanthi Unicode","
  • 屏2线屏2线 上大埔-高树,是位于台湾屏东县的一条乡道,属于屏东县乡道系统。起点高树乡大埔,终点高树市区,两点皆连接台27线,全长13.286公里。曾有一条支线。全线均位在屏东县境内。南郡-青埔尾,起自台27线,终至屏2线,全长2.385公里,曾为屏2线的唯一支线。2014年1月10日,交通部公告全线解编。屏2线是高树市区通往县道185号联络道路,由于沿线道路狭窄曲折且两侧多为住宅区,易造成交通瓶颈,还影响两侧住户进出安全。屏东县县长潘孟安表示,在地居民一再反映屏2线拓宽的迫切性,经工务处规划设计,已提报公路总
  • 奥恩省奥恩省(法语:Orne)是法国西北部诺曼底大区所辖的省份。奥恩省得名于奥恩河。奥恩省面积6,103平方公里,总人口292,609 (2007)。省会位于阿朗松。奥恩省设立于1790年3月4日,是法国大革命期间创设的83个省之一。奥恩省经济中心位于阿朗松。该省经济以农业为主。5个海外省及大区
  • 乾道 (西夏)乾道(1067年-1068年)是西夏惠宗李秉常的第一个年号,共计2年。清代学者戴锡章《西夏纪》、周春《西夏书》、吴广成《西夏书事》,近人林旅芝《西夏史》均以夏毅宗李谅祚去世的隔年(1068年)为乾道元年,而方诗铭《中国历史纪年表》以李谅祚去世当年(1067年)的十二月为乾道元年,并未说明原因。