1 个稳定版本
1.0.0 | 2021年9月11日 |
---|
#437 in 内存管理
用于 bgfx-rs
13KB
262 行
cfixed-string用于将Rust字符串传递到C,可能无需进行堆分配。
使用标准库CString
的问题在于,它总是会分配堆内存,即使你试图使用的字符串非常短。这可能导致性能问题,并可能根据你的系统增加内存碎片。
CFixedString
将具有512字节的栈缓冲区,然后在调用FFI函数时使用。这允许字符串(包括空终止符)长度小于512个字符的字符串在栈上而不是在堆上,从而消除了内存分配和释放的需要。如果字符串更长,它将回退到标准库中的CString
。
使用方法
# Cargo.toml
[dependencies]
cfixed-string = "1.0"
示例
use cfixed_string::CFixedString;
fn main() {
// Create a string that will be stored on the stack
let ffi_str = CFixedString::from_str("test");
// And pass it to the FFI function
ffi_func(ffi_str.as_ptr());
// It's also possible to format a string directly on the stack if it fits using the format_c macro
let fmt_str = format_c!("hello {}", 123);
// And pass it to the FFI function
ffi_func(ffi_str.as_ptr());
}