Afs*_*ani -1 memory-management rust
我几天前读过这篇文章,我想在Rust中实现这样一个东西的最佳方法是什么.本文建议在每次迭代后使用缓冲区而不是打印字符串.
这是正确的说String::with_capacity()(或Vec)等于mallocC吗?
代码示例:
String::with_capacity(size * 4096)
Run Code Online (Sandbox Code Playgroud)
等于:
char *buf = malloc(size * 4096);
Run Code Online (Sandbox Code Playgroud)
它不是"平等的",Rust String是一个复合对象; String::with_capacity创造一个String不仅是一个缓冲区; 它是一个包装Vec<u8>:
pub struct String {
vec: Vec<u8>,
}
Run Code Online (Sandbox Code Playgroud)
并且a Vec不仅仅是内存中的一个部分 - 它还包含一个RawVec及其长度:
pub struct Vec<T> {
buf: RawVec<T>,
len: usize,
}
Run Code Online (Sandbox Code Playgroud)
并且a RawVec也不是原始的:
pub struct RawVec<T> {
ptr: Unique<T>,
cap: usize,
}
Run Code Online (Sandbox Code Playgroud)
所以当你打电话时String::with_capacity:
pub fn with_capacity(capacity: usize) -> String {
String { vec: Vec::with_capacity(capacity) }
}
Run Code Online (Sandbox Code Playgroud)
除了保留一段内存之外,您所做的远不止这些.