问题标签 [thunk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1528 浏览

haskell - thunk 使用多少内存?

假设我有大量(数百万/十亿+)这些简单的Foo数据结构:

有这么多这些浮动,有必要考虑它们消耗了多少内存。

在 64 位机器上,每个Int都是 8 个字节,所以a只需要 8 个字节(因为它是严格且未打包的)。b但是会占用多少内存呢?我想这会根据 thunk 是否被评估而改变,对吧?

我想在一般情况下这是不可能的,因为b可能取决于任何数量的内存位置,这些位置只保留在内存中,以防b需要评估。但是如果b只依赖于(一些非常昂贵的操作)a呢?那么,是否有一种确定的方法来判断将使用多少内存?

0 投票
1 回答
151 浏览

lambda - opa:高阶函数应用

在 Opa 中,可以部分应用函数。但是,我想提供一个带有所有参数的函数,并返回一个不带参数的函数。例如:

上面的代码运行良好,但有一个问题:它只适用于只接受一个参数的函数。我很好奇 Opa 是否可以使上述内容更通用,因此该函数可用于任意数量的函数。

我无法在 Opa API、论坛、IRC、Github 或 SO 上找到有关 apply- (scheme) 或 call- (prolog) 之类的函数的信息,所以在这里我希望我在某个地方错过了一些东西。;-)(有一些 @lazy 关键字的痕迹,但没有解释或文档,所以我没有保留参考,抱歉。)

为了进一步澄清/说明:如果 Opa 是方案,我将编写以下代码:

0 投票
1 回答
1438 浏览

winapi - IAT 在自己的进程上挂钩 ExitProcess

我想问一个关于 IAT 挂钩我自己的进程的问题。

我目前正在尝试挂钩 ExitProcess,以便它在任何 ExitProcess 调用之前运行某个函数,并且我面临一些麻烦。

我在运行时遍历 PE,通过 IMAGE_IMPORT_DESCRIPTOR ,在那里找到 kernel32.dll (这是第一个 .dll)之后,我按名称遍历它 THUNK_DATA-s,试图在那里找到 ExitProcess,尽管没有运气。

记录功能,那些是在那里找到的功能 -

尽管 ExitProcess 不在 .

我尝试通过函数指针而不是名称进行枚举(使用 thunkdata 而不是 originalthunkdata),尽管它也失败了。

ExitProcess 的 GetProcAddress 确实在 PE 中返回了一个指针,我尝试通过 loadlibrary 强制加载 kernel32.dll(尽管它应该自动加载),尽管结果是相同的。

可能是什么问题呢 ?

非常感谢你,祝你有美好的一天!

0 投票
1 回答
1696 浏览

c - matlab生成的thunk文件的目的是什么?

当从 matlab 调用外部 C 库 (DLL) 时,matlab 似乎首先会尝试filename_thunk_pcwinXX.dll在临时目录中生成一个名为(其中 XX 是 32 或 64 取决于操作系统)的 thunk 文件。

在 matlab 文档中,它提到该文件是外部 DLL 和 Matlab 之间的接口,因此它不包含原始外部 DLL 的任何其他数据。

问题是,我写了一个库,在运行时可能会调用其他库,当库调用某些库(不是全部,我的库和这里的其他库是 64 位的)时,matlab 总是会给我一些奇怪的结果甚至崩溃DLL)。

当从其他 C/C++ 程序而不是 matlab 调用时,我所有的库函数都可以完美地工作。

我只是想知道,为了让 matlab 正常工作,我的库在运行时调用的这些其他库是否也需要获取某种 thunk 文件?我简直不敢相信,但我也不知道 matlab 如何处理外部库的确切方法。

0 投票
1 回答
74 浏览

lazy-evaluation - scala 是否有一个用于评估一次或从不评估的惰性 thunk 的类?

简单的东西

它是在某处定义的吗?

或者也许更复杂一点

0 投票
2 回答
2149 浏览

c++ - 如何通过符号在内存中的地址获取有关符号的更多信息

我试图通过它在内存中的地址来获取符号名称。我使用int dladdr(void *addr, Dl_info *info)函数 fromdlfcn.h来获取信息:

但此函数找不到与地址匹配的符号,并将 dli_sname 和 saddr 设置为 NULL。

在这种情况下,如何获取符号名称或有关符号的任何其他信息(种类、属性等)?

注意:我要查找的符号名称是_ZTv0_n24_N4QGst13PropertyProbeD0Ev. QGst::PropertyProbe它在类的vtable 中列出g++ -fdump-class-hierarchy

但是,当我通过和符号查看共享对象并遍历虚函数指针列表dladdr时,我没有通过它的地址找到它。v-table 中的所有其他函数都由 找到。dlopendlsym_ZTVN4QGst13PropertyProbeEdladdr

0 投票
3 回答
6037 浏览

c++ - 对虚拟 thunk 的未定义引用

我有一个错误说

对于我正在尝试创建的库。

这是我的代码:

.

.

我真的不习惯制作图书馆。我在 QtCreator 下。

我发现“虚拟 thunk”可能是一个“函数指针”,指向无法找到的东西(析构函数?)......

但是,我在互联网上没有找到任何非常清楚的东西......

0 投票
2 回答
1232 浏览

c# - 非静态回调如何从本机代码工作?

问这个问题有点奇怪,因为我的代码似乎不应该工作,但它确实有效,虽然我没有抱怨,但我想确认为什么?哈哈

简单地说,我有一个 C++ 本机 DLL(根本没有 CLR/托管支持),它从 C# 代码中获取回调。native 端存储一个 stdcall 回调函数,由 C# 端提供。我一直认为回调方法(在 C# 中)必须是静态的,但非静态和 lambda 表达式都可以正常工作!?如何从本机代码封送“this”指针?我一直以为原生代码只存储非实例函数指针?

现在,我确实找到了一篇文章,其中有人发出 IL 代码以在本机和非静态托管回调之间“架起”桥梁。我还注意到了这种贬值的方法:“Marshal.GetUnmanagedThunkForManagedMethodPtr()”。该方法不再受支持,我假设这意味着它是内置的?

问题总结:

  1. thunking 现在是通过发出 IL 代码在 .NET 中内置的吗?如果是这样,它在哪个版本的 .NET 中成为本机支持的?

  2. Mono 是否也支持隐式“thunking”?

  3. 当为托管回调发出 IL 时,当 thunk 引用的实例被删除时会发生什么?IL 是否被删除,或者这可能会导致内存“泄漏”?

谢谢。

0 投票
3 回答
283 浏览

scala - 使Scala在存在Nothing类型的参数的情况下选择不太具体的重载方法

如果在 type 存在的情况下遇到一个有趣的情况,即 thunk 与函数Nothing

现在棘手的一点是最后一种情况。是否可以修改apply方法以使 Scala 选择它的 thunk 版本,而不是Function1版本(更具体,因此更受欢迎Nothing <: Function1[_,_],因此......)

我试图提出低优先级的隐含和磁铁模式,但还没有找到解决方案。

0 投票
1 回答
329 浏览

scheme - thunk 对象的评估如何工作?

SICP 中的这一章说,actual-value提取 thunk 的真实值的定义是这样的:

但是,如果exp它本身是一个 thunk 呢?根据它的定义,delay-it它意味着它是表单的列表对象(list 'thunk exp env)。然而eval函数并没有准备好处理以 'thunk. 为什么 eval 由于 cond 表达式不匹配而不会产生错误?

编辑: 我认为评估以下表达式应该会导致错误:

add是一个复合过程,因此delay-it在应用它之前对其参数执行。+是一个原始生产,这意味着actual-value将在其参数上调用它。论据是 2 和 a。a 是一个 thunk 对象,因此actual-value在将它传递给 时应该会产生错误eval,因为eval没有处理带有 'thunk.