gpt4 book ai didi

LLVM 禁用堆栈

转载 作者:行者123 更新时间:2023-12-01 04:35:09 25 4
gpt4 key购买 nike

当编译一种使用堆分配的闭包保存 by-val 或指向堆分配参数的指针的语言时,如何保证 LLVM 不生成使用堆栈的代码(并可选择使用 ebp/esp 作为另一个通用目的注册)?

该函数可能在根本没有 C/传统堆栈的链/微线程中运行。


编辑

一篇可能相关的文章,但没有说明是否保证 LLVM 不会尝试消耗堆栈。

http://nondot.org/sabre/LLVMNotes/ExplicitlyManagedStackFrames.txt


编辑2

需要明确的是,我不需要常规调用的堆栈,因为我可以生成带有指向旧闭包的指针的新闭包,以便从调用返回时状态是正确的。

将其视为一个链接堆栈。

最佳答案

您必须编写自己的后端代码。现有的 x86/x64 后端将不会被编程为支持这个——堆栈的使用对于几乎所有函数来说基本上是强制性的。您可以将 alloca() 指令降低到您自己的真正位于堆上的伪堆栈。更不用说您必须开发自己的调用堆栈、您自己的函数调用 ABI,以及所有这些讨厌的东西。即便如此,您基本上只能模拟堆栈。

唯一不提供硬件堆栈但仍然有些用处的编程环境是 GPU,实际上,这只是因为它们提供了如此多的可用寄存器,而且每个功能都应该非常受限。只有可用的寄存器空间会削弱在 x86 或 x64 上运行的程序。

关于LLVM 禁用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940803/

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