#panic #allocator #assert #print #format #global-allocator

nightly no-std bin+lib alloc-fmt

适用于分配器使用的格式化工具

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2020 年 4 月 4 日
0.1.0 2017 年 10 月 20 日

#393 in 内存管理


alloc-tls 中使用

Apache-2.0/MIT

22KB
374

alloc-fmt

alloc-fmt 提供类似于 printlneprintlnpanicassertdebug_assert 等的格式化和断言宏,这些宏在全局分配器中使用是安全的。标准库的格式化、恐慌和断言宏可以分配,这意味着如果它们用于全局分配器的实现中,可能会导致无限递归。这个包中的宏通过不分配(对于格式化宏)或检测递归(对于恐慌和断言宏)来避免这个问题。


lib.rs:

安全用于分配器的格式化和断言宏。

alloc-fmt 提供类似于标准库的 printlneprintlnpanicassertdebug_assert 等格式化和断言宏,这些宏在全局分配器中使用是安全的。标准库的格式化和断言宏可以进行分配,这意味着如果它们用于全局分配器的实现中,可能会导致无限递归。这个包中的宏通过不分配(在格式化宏的情况下)或检测递归(在恐慌和断言宏的情况下)来避免这个问题。

使用和行为

这个包中的宏命名规则为 alloc_xxx,其中 xxx 是对应标准库宏的名称(例如,alloc_printlnalloc_debug_assert 等)。

格式化宏的行为与其标准库中的对应行为相同。恐慌和断言宏的行为略有不同。当断言失败或显式调用恐慌时,首先无条件地将消息打印到stderr(以防进一步处理导致崩溃)。然后打印堆栈跟踪,并终止进程。如果在打印堆栈跟踪期间检测到递归,进程将立即终止。例如,如果计算堆栈跟踪的代码分配,则会触发进一步的断言失败或恐慌,从而引发递归。这个检查是保守的——有时即使没有递归也可能检测到递归。

与标准库中的断言和恐慌宏不同,栈不会被回溯,一旦触发断言失败或恐慌,就无法捕获或终止。

依赖关系

~155–730KB
~14K SLoC