问题标签 [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.
haskell - thunk 使用多少内存?
假设我有大量(数百万/十亿+)这些简单的Foo
数据结构:
有这么多这些浮动,有必要考虑它们消耗了多少内存。
在 64 位机器上,每个Int
都是 8 个字节,所以a
只需要 8 个字节(因为它是严格且未打包的)。b
但是会占用多少内存呢?我想这会根据 thunk 是否被评估而改变,对吧?
我想在一般情况下这是不可能的,因为b
可能取决于任何数量的内存位置,这些位置只保留在内存中,以防b
需要评估。但是如果b
只依赖于(一些非常昂贵的操作)a
呢?那么,是否有一种确定的方法来判断将使用多少内存?
lambda - opa:高阶函数应用
在 Opa 中,可以部分应用函数。但是,我想提供一个带有所有参数的函数,并返回一个不带参数的函数。例如:
上面的代码运行良好,但有一个问题:它只适用于只接受一个参数的函数。我很好奇 Opa 是否可以使上述内容更通用,因此该函数可用于任意数量的函数。
我无法在 Opa API、论坛、IRC、Github 或 SO 上找到有关 apply- (scheme) 或 call- (prolog) 之类的函数的信息,所以在这里我希望我在某个地方错过了一些东西。;-)(有一些 @lazy 关键字的痕迹,但没有解释或文档,所以我没有保留参考,抱歉。)
为了进一步澄清/说明:如果 Opa 是方案,我将编写以下代码:
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(尽管它应该自动加载),尽管结果是相同的。
可能是什么问题呢 ?
非常感谢你,祝你有美好的一天!
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 如何处理外部库的确切方法。
lazy-evaluation - scala 是否有一个用于评估一次或从不评估的惰性 thunk 的类?
简单的东西
它是在某处定义的吗?
或者也许更复杂一点
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 中的所有其他函数都由 找到。dlopen
dlsym
_ZTVN4QGst13PropertyProbeE
dladdr
c++ - 对虚拟 thunk 的未定义引用
我有一个错误说
对于我正在尝试创建的库。
这是我的代码:
.
.
我真的不习惯制作图书馆。我在 QtCreator 下。
我发现“虚拟 thunk”可能是一个“函数指针”,指向无法找到的东西(析构函数?)......
但是,我在互联网上没有找到任何非常清楚的东西......
c# - 非静态回调如何从本机代码工作?
问这个问题有点奇怪,因为我的代码似乎不应该工作,但它确实有效,虽然我没有抱怨,但我想确认为什么?哈哈
简单地说,我有一个 C++ 本机 DLL(根本没有 CLR/托管支持),它从 C# 代码中获取回调。native 端存储一个 stdcall 回调函数,由 C# 端提供。我一直认为回调方法(在 C# 中)必须是静态的,但非静态和 lambda 表达式都可以正常工作!?如何从本机代码封送“this”指针?我一直以为原生代码只存储非实例函数指针?
现在,我确实找到了一篇文章,其中有人发出 IL 代码以在本机和非静态托管回调之间“架起”桥梁。我还注意到了这种贬值的方法:“Marshal.GetUnmanagedThunkForManagedMethodPtr()”。该方法不再受支持,我假设这意味着它是内置的?
问题总结:
thunking 现在是通过发出 IL 代码在 .NET 中内置的吗?如果是这样,它在哪个版本的 .NET 中成为本机支持的?
Mono 是否也支持隐式“thunking”?
当为托管回调发出 IL 时,当 thunk 引用的实例被删除时会发生什么?IL 是否被删除,或者这可能会导致内存“泄漏”?
谢谢。
scala - 使Scala在存在Nothing类型的参数的情况下选择不太具体的重载方法
如果在 type 存在的情况下遇到一个有趣的情况,即 thunk 与函数Nothing
:
现在棘手的一点是最后一种情况。是否可以修改apply
方法以使 Scala 选择它的 thunk 版本,而不是Function1
版本(更具体,因此更受欢迎Nothing <: Function1[_,_]
,因此......)
我试图提出低优先级的隐含和磁铁模式,但还没有找到解决方案。
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.