我正在寻找一种将堆栈分配包装在抽象数据类型中的方法。例如,我想要一个可以通过堆栈上的分配严格工作的向量。我最大的障碍当然是alloca
仅在当前堆栈框架内工作 - 因此我没有看到将其包装到函数中的简单方法。
到目前为止,我认为做到这一点的唯一方法是使用类似宏的函数,这些函数保证被编译到给定的堆栈帧中。我不喜欢这种方法,因为它不像人们希望的那样类型友好,并且需要比预期更详细的命名。
无论如何,我可以得到一个函数来在其调用者堆栈上分配吗?我知道这通常会破坏立即调用堆栈,因此很可能该函数也必须以某种方式强制内联。我不清楚我有什么选择,所以我正在寻找一些想法,或指向可能的选择的指示。
Notes:
最终目标就像是std::vector
它严格作用于立即函数堆栈。显然它只会作为const
对象被调用者,它的生命随着函数的结束而结束。
C 方法很好,只要它比我的基于宏的方法更好。虽然一些支持宏也是可以接受的。
我知道这是一个相当具体的优化,最好我希望能够(使用标志)打开/关闭它(仅使用普通的 std::vector 进行调试)。它会给我们代码的重要部分带来轻微的速度提升,但可能不足以证明通过太多奇怪的结构使其不可读。
Answer:很可能这是不可能的,只有宏观方法才有效。
你不能。
当函数返回时,其堆栈被展开,堆栈指针返回到之前的位置。如果你不想造成真正的混乱,就必须这样做。 alloca 所做的只是移动堆栈指针,因此函数返回会撤消此分配。
宏会起作用,因为它们只是将代码添加到同一函数中。但这将是丑陋的,没有真正改善的希望。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)