gpt4 book ai didi

rust - 我可以创建一个指向堆栈对象的拥有指针吗

转载 作者:行者123 更新时间:2023-11-29 07:47:45 25 4
gpt4 key购买 nike

我想将一个 FnOnce 闭包传递给一个稍后要使用的对象,但我想避免任何堆分配。我可以通过将闭包保留在堆栈上来避免堆分配。但问题是我无法传递对该对象的引用,因为 FnOnce call_once 消耗了闭包。所以我需要在没有堆分配的情况下传递一个拥有的指针(例如 Box)。

这可能吗?我想做的是:

fn main() {
let mut scheduler = NoHeapScheduler();

// allocate the task on the stack
let task = move ||;

// somehow pass ownership of the closure, while keeping it allocated on the stack.
scheduler.add_task(StaticBox::new(task));

schedule.run();
}

据我所知,只要调度程序不会超过任务,这应该是安全的。有什么办法可以做到这一点吗?

最佳答案

Can I create an owned pointer to a stack object?

没有。这实际上是没有意义的,因为根据定义,堆栈对象由堆栈拥有,所以它不能由其他东西拥有。

So I need to pass an owned pointer (e.g. Box) without heap allocation.

Box外,还有其他拥有的指针.

目前,我知道没有堆分配,但没有理由不能做到。

我设想一个 InlineFnOnceBox<S: Default, R, A>用作InlineFnOnceBox<[u8; 48], (), ()>在这种情况下,它将包含用作后备存储的数组本身,以及指向 FnOnce<A -> R> 的虚拟指针。实例化类型的 v 表。

它需要一些小心(和 unsafe 代码)来实例化,但在其他方面似乎是可行的。

关于rust - 我可以创建一个指向堆栈对象的拥有指针吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897157/

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