【发布时间】:2021-05-31 23:04:17
【问题描述】:
有没有办法(除了查看实现和文档)来确定 rust 中的 new() 何时分配到堆栈或堆上?
理想情况下,我正在寻找一种在编写源代码时一目了然的方法来确定这一点。例如,可以添加限制是否可以进行堆分配的特征或参数。
【问题讨论】:
-
new将始终返回堆栈上的值,所以除非它返回一个已知的涉及堆的东西(例如Box、Rc、Vec),否则真的没有办法知道它是否分配,至少在 Rust 开始获得更多基于分配器的 API 之前,使用分配器的东西至少告诉你它 可以 分配,尽管没有的东西并不是说它无法分配)。 -
@E_net4thecircusstopper,不知何故回答。但是,我更多的是考虑一种根据代码确定它的方法。所以在写 SW 的时候,我可以一目了然地了解发生了什么。
-
@Masklinn 似乎在 Rust 中使用基于分配器的 API 或一些限制参数会很好。
-
@AdamM "local" 分配器正在处理中(有an entire WG on the subject),但是全局分配器将始终存在,因此除非它是未设置全局分配器的
no_std代码库,否则它总是可能的让被调用者在幕后分配。
标签: memory rust stack heap-memory allocation