Chr*_*odd 120
A thunk
通常是指一小段代码,它被称为一个函数,做一些小事,然后JUMP
s到另一个位置(通常是一个函数),而不是返回给它的调用者.假设JUMP目标是正常函数,当它返回时,它将返回到thunk的调用者.
Thunk可用于有效地实现许多有用的东西
协议转换 - 当从使用一个调用约定的代码调用到使用不同调用约定的代码时,可以使用a thunk
来适当地转换参数.这仅在返回约定兼容时才有效,但通常情况就是如此
虚函数处理 - 当在C++中调用乘法继承的基类的虚函数时,需要修复this
指针以使其指向正确的位置.A thunk
可以做到这一点.
动态闭包 - 当你构建一个动态闭包时,闭包函数需要能够在创建它的上下文中获取.thunk
可以构建一个小的(通常在堆栈上),它在一些寄存器中设置上下文信息,然后跳转到实现闭包函数的静态代码片段.这里的thunk实际上为函数提供了一个或多个隐藏的额外参数,这些参数不是由调用站点提供的.
Rob*_*vey 78
thunk这个词在计算机科学中至少有三个相关含义."thunk"可能是:
我经常看到它在第三种情况下使用过.
http://en.wikipedia.org/wiki/Thunk
Iva*_*ard 18
术语thunk最初是指Royal Radar Establishment在其Algol60编译器中实现名称传递所使用的机制.通常,它指的是在引用明显静态的对象时引发动态行为的任何方式.这个词是由Brian Wichmann发明的,当他被要求解释名字时说:"你出去从记忆中加载价值,然后突然 - 咚咚 - 你正在评估表达方式."
Thunk已被放入硬件中(参见KDF9,Burroughs大型机).有几种方法可以在软件中实现它们,特别是机器,语言和编译器.
该术语已经超越了名称,包括任何明显或名义上静态数据引用引起动态行为的情况.相关术语包括"蹦床"和"未来".
Osc*_*Ryz 17
一些面向对象语言的编译器(如C++)生成称为"thunks"的函数,作为存在多个或虚拟继承时虚函数调用的优化.
摘自:http://en.wikipedia.org/wiki/Thunk#Thunks_in_object-oriented_programming
使用方式有很大差异.几乎普遍地,thunk是一种功能(至少在概念上)非常小而且简单.它通常是某种适配器,为您提供正确的接口或某些东西(某些数据,其他功能等),但至少看起来没那么做.
它几乎就像一种语法糖,除了(至少通常使用的)语法糖应该使事物看起来像人类读者想要看到它们的方式,并且一个方法是使某些东西看起来像编译器想要的方式看见.
已经在SO上询问了此问题,请参见:
据我所知,它类似于lambda语句,在这里您可能不希望返回值,直到需要评估它为止。或者也可以将其与属性获取器进行比较,该属性获取器在设计上执行一些代码以返回值,同时使接口形式更像是变量,但是具有可通过继承或继承交换出来的多态行为。通过换出将根据编译时或环境特征在运行时求值并返回值的函数指针。
我要看一下,但我认为thunking是32位处理器用来运行传统16位代码的过程.
我过去常常用它来比喻你如何限制说话的速度以及与愚蠢的人交谈时使用的词语.
是的,这是在维基百科链接(关于32位的部分,而不是我的nerdalogy).
https://en.wikipedia.org/wiki/Thunk
许多关于互操作性thunk的文献涉及各种Wintel平台,包括MS-DOS,OS/2,[8] Windows [9] [10]和.NET,以及从16位到32位内存寻址的转换.随着客户从一个平台迁移到另一个平台,对于支持为旧平台编写的遗留软件而言,thunk必不可少.
(我强调的是)
小智 5
我很苦恼地发现没有对这个术语的一般“计算机科学”定义与其历史上已知的事实上的用法相匹配。我记得第一次在现实生活中遇到它实际上是在 OS/2 天和 16-32 位转换中被调用。在今天的应用中,“thunking”似乎具有讽刺意味。
我粗略的理解是,thunk 是一个存根例程,它什么也不做,或者跨越系统之间的某些基本边界,如上述历史案例中所示。
因此,这种感觉就像是从一个环境掉到另一个环境中的联觉(比喻/作为明喻)发出“thunk”的声音。
归档时间: |
|
查看次数: |
28549 次 |
最近记录: |