【问题标题】:Does Rust expose call stack depth?Rust 是否公开调用堆栈深度?
【发布时间】:2018-02-11 04:20:49
【问题描述】:

背景信息:我有一个函数可以直接或通过其他函数间接调用自身,并且希望在程序用完调用堆栈时以一种廉价的方式优雅地失败。我可以手动计算调用次数,但我想要一种更优雅、更强大的方法来实现这一点。

是否可以使用稳定的 Rust 确定当前调用堆栈深度?

我能找到的唯一选择是:

  1. 在 ASM 中遵循堆栈,但它需要不稳定且不可移植。
  2. 使用 GNU libc 扩展(回溯)。但是,回溯太浪费了,也不标准。

【问题讨论】:

    标签: recursion rust callstack


    【解决方案1】:

    stacker crate 似乎提供了您想要的功能:

    • 保证可用堆栈数量的函数
    • 一个查询剩余堆栈数量的函数,您可以在程序实际堆栈溢出之前使用它来保释

    该库支持 Linux、Windows 和 macOS 目标。

    【讨论】:

    • 鉴于 github 上唯一未解决的问题的严重性,我对 crate 的健康状况有些担忧,但它似乎确实提供了我需要的东西。希望这个功能能像 glibc 一样合并到标准库中。
    • 根据this comment by the crates's owner and one of the main rustc's dev,这不会被移到标准库中。然而,this issue 表明这个箱子有一个美好的未来。
    • 我当然希望如此,因为这个问题对于可靠的系统软件有多么重要。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2021-08-06
    • 2017-09-16
    • 1970-01-01
    • 2021-12-28
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多