println 宏是否分配堆内存?

Jak*_*lba 6 rust

宏是否println分配堆内存?format即调用宏来创建要打印的字符串println和仅在宏中格式化内容之间有什么区别(就内存分配而言)println

tre*_*tcl 4

No、print!write!和其他类似的不返回 a 的宏String不需要分配内存;它们调用format_args!(这是内置的编译器)来处理参数并最终用于std::fmt::write将数据直接写入其目的地,而无需准备临时的String.

请注意,这并不意味着这些宏是无缓冲的;在许多情况下,“直接到达目的地”意味着到达某处的中间缓冲区,而不是立即到达文件或标准输出。但该缓冲区可能位于堆栈上,并且不需要在每次调用时重新分配。