2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2020 年 4 月 4 日 |
---|---|
0.1.0 | 2017 年 10 月 20 日 |
#393 in 内存管理
在 alloc-tls 中使用
22KB
374 行
alloc-fmt
alloc-fmt
提供类似于 println
、eprintln
、panic
、assert
、debug_assert
等的格式化和断言宏,这些宏在全局分配器中使用是安全的。标准库的格式化、恐慌和断言宏可以分配,这意味着如果它们用于全局分配器的实现中,可能会导致无限递归。这个包中的宏通过不分配(对于格式化宏)或检测递归(对于恐慌和断言宏)来避免这个问题。
lib.rs
:
安全用于分配器的格式化和断言宏。
alloc-fmt
提供类似于标准库的 println
、eprintln
、panic
、assert
、debug_assert
等格式化和断言宏,这些宏在全局分配器中使用是安全的。标准库的格式化和断言宏可以进行分配,这意味着如果它们用于全局分配器的实现中,可能会导致无限递归。这个包中的宏通过不分配(在格式化宏的情况下)或检测递归(在恐慌和断言宏的情况下)来避免这个问题。
使用和行为
这个包中的宏命名规则为 alloc_xxx
,其中 xxx
是对应标准库宏的名称(例如,alloc_println
、alloc_debug_assert
等)。
格式化宏的行为与其标准库中的对应行为相同。恐慌和断言宏的行为略有不同。当断言失败或显式调用恐慌时,首先无条件地将消息打印到stderr(以防进一步处理导致崩溃)。然后打印堆栈跟踪,并终止进程。如果在打印堆栈跟踪期间检测到递归,进程将立即终止。例如,如果计算堆栈跟踪的代码分配,则会触发进一步的断言失败或恐慌,从而引发递归。这个检查是保守的——有时即使没有递归也可能检测到递归。
与标准库中的断言和恐慌宏不同,栈不会被回溯,一旦触发断言失败或恐慌,就无法捕获或终止。
依赖关系
~155–730KB
~14K SLoC