【问题标题】:How to determine when new() in Rust allocates on stack or heap如何确定 Rust 中的 new() 何时在堆栈或堆上分配
【发布时间】:2021-05-31 23:04:17
【问题描述】:

有没有办法(除了查看实现和文档)来确定 rust 中的 new() 何时分配到堆栈或堆上?

理想情况下,我正在寻找一种在编写源代码时一目了然的方法来确定这一点。例如,可以添加限制是否可以进行堆分配的特征或参数。

【问题讨论】:

  • new 将始终返回堆栈上的值,所以除非它返回一个已知的涉及堆的东西(例如BoxRcVec),否则真的没有办法知道它是否分配,至少在 Rust 开始获得更多基于分配器的 API 之前,使用分配器的东西至少告诉你它 可以 分配,尽管没有的东西并不是说它无法分配)。
  • @E_net4thecircusstopper,不知何故回答。但是,我更多的是考虑一种根据代码确定它的方法。所以在写 SW 的时候,我可以一目了然地了解发生了什么。
  • @Masklinn 似乎在 Rust 中使用基于分配器的 API 或一些限制参数会很好。
  • @AdamM "local" 分配器正在处理中(有an entire WG on the subject),但是全局分配器将始终存在,因此除非它是未设置全局分配器的no_std 代码库,否则它总是可能的让被调用者在幕后分配。

标签: memory rust stack heap-memory allocation


【解决方案1】:

Rust 中名为 new() 的函数无论如何都不是特殊的。所以不,您不能轻易确定此类函数返回的内容是否拥有任何堆分配的数据。即使对于std::default::Default trait 实现,也没有限制或约定阻止default() 方法进行堆分配,通常也没有记录。

【讨论】:

  • 谢谢。这证实了我的假设。似乎某种分配限制在 rust 中非常有用,尤其是在嵌入式或性能关键型应用程序中。
猜你喜欢
  • 2010-09-17
  • 2020-10-03
  • 2023-03-27
  • 2013-01-25
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多