gpt4 book ai didi

c - C中的假匿名函数

转载 作者:太空狗 更新时间:2023-10-29 16:38:51 25 4
gpt4 key购买 nike

this SO线程,Brian Postow suggested涉及虚假匿名函数的解决方案:

make a comp(L) function that returns the version of comp for arrays of length L... that way L becomes a parameter, not a global

如何实现这样的功能?

最佳答案

参见 the answer I just posted那个问题。您可以使用 callback(3)在运行时生成新函数的库。它不符合标准,因为它涉及许多丑陋的特定于平台的 hack,但它确实适用于大量系统。

该库负责分配内存,确保内存可执行,并在必要时刷新指令缓存,以确保动态生成的代码(即闭包)可执行。它本质上会生成在 x86 上可能看起来像这样的代码 stub :

  pop %ecx
push $THUNK
push %ecx
jmp $function
THUNK:
.long $parameter

然后返回第一条指令的地址。这个 stub 所做的是将返回地址存储到 ECX(x86 调用约定中的临时寄存器),将一个额外的参数压入堆栈(指向 thunk 的指针),然后重新压入返回地址。然后,它跳转到实际函数。这导致该函数误认为它有一个额外的参数,即闭包的隐藏上下文。

其实比这更复杂( stub 末尾实际调用的函数是__vacall_r,而不是函数本身,__vacall_r()处理了更多的实现细节), 但这是基本原则。

关于c - C中的假匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com