首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是'thunk'?

什么是'thunk'?
EN

Stack Overflow用户
提问于 2010-04-15 06:23:51
回答 12查看 36.6K关注 0票数 148

我见过它在编程中使用(特别是在C++领域),但不知道它是什么。这可能是一种设计模式,但我可能错了。有没有人能举个很好的例子?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-04-15 08:32:59

thunk通常是指作为函数调用的一小段代码,做一些小事情,然后JUMPs到另一个位置(通常是一个函数),而不是返回给它的调用者。假设跳转目标是一个普通函数,当它返回时,它将返回给thunk的调用者。

Thunk可以用来高效地实现许多有用的东西

  • 协议转换--当从使用一种调用约定的代码调用到使用不同调用约定的代码时,可以使用thunk来适当地转换参数。这只在返回约定兼容的情况下才有效,但这通常是
  • 虚函数处理的情况--在C++中调用多继承基类的虚函数时,需要修复this指针以使其指向正确的位置。
  • 动态闭包--在构建动态闭包时,闭包函数需要能够访问创建它的上下文。可以构建一个小的thunk (通常在堆栈上),它在一些寄存器中设置上下文信息,然后跳转到实现闭包功能的静态代码段。这里的thunk实际上是为函数提供了一个或多个隐藏的额外参数,而调用站点并没有提供这些参数。
票数 151
EN

Stack Overflow用户

发布于 2010-04-15 06:25:59

在计算机科学中,单词thunk至少有三个相关的含义。"thunk“可能是:

  • 用于执行延迟计算的代码(类似于闭包)
  • 某些虚拟函数表实现的功能(类似于包装函数)
  • 将机器数据从一种特定于系统的形式映射到另一种形式,通常是出于兼容性原因

我经常看到它被用在第三个上下文中。

http://en.wikipedia.org/wiki/Thunk

票数 82
EN

Stack Overflow用户

发布于 2015-07-18 11:25:19

术语thunk最初指的是Algol60编译器中按名称传递的Royal Radar Establishment实现所使用的机制。一般来说,它指的是在引用一个明显是静态的对象时,引发动态行为的任何方式。这个术语是由Brian Wichmann发明的,当他被要求解释按名称传递时,他说:“好吧,你出去从内存中加载值,然后突然-砰--你就在那里计算一个表达式。”

Thunk已放入硬件中(请参阅KDF9、Burroughs mainframes)。有几种方法可以在软件中实现它们,所有这些都是特定于机器、语言和编译器的。

这个术语已经超越了通过名称传递的范围,包括任何表面上或名义上的静态数据引用导致动态行为的情况。相关术语包括“弹床”和“未来”。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2641489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档