当我开始学习 C 时,我实现了常见的数据结构,例如列表、映射和树。我使用 malloc
、calloc
、realloc
和 free
在请求时手动管理内存。我用 C++ 做了同样的事情,使用 new
和 delete
。
现在是 Rust。似乎 Rust 没有提供任何对应于 C 或 C++ 的函数或运算符,至少在稳定版本中是这样。
是 Heap
结构和 ptr
模块(标有experimental
)这种东西要看什么?
我知道这些数据结构已经在语言中了。这是为了学习。
最佳答案
虽然真的不建议这样做,但您可以像在 C 中习惯的那样使用 malloc
和 free
。它不是很有用,但它是这样的看起来:
extern crate libc; // 0.2.65
use std::mem;
fn main() {
unsafe {
let my_num: *mut i32 = libc::malloc(mem::size_of::<i32>() as libc::size_t) as *mut i32;
if my_num.is_null() {
panic!("failed to allocate memory");
}
libc::free(my_num as *mut libc::c_void);
}
}
更好的方法是使用 Rust 的标准库:
use std::alloc::{alloc, dealloc, Layout};
fn main() {
unsafe {
let layout = Layout::new::<u16>();
let ptr = alloc(layout);
*(ptr as *mut u16) = 42;
assert_eq!(*(ptr as *mut u16), 42);
dealloc(ptr, layout);
}
}
关于memory-management - Rust 手动内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48485454/