memory-management - Rust 手动内存管理

标签 memory-management rust

当我开始学习 C 时,我实现了常见的数据结构,例如列表、映射和树。我使用 malloccallocreallocfree 在请求时手动管理内存。我用 C++ 做了同样的事情,使用 newdelete

现在是 Rust。似乎 Rust 没有提供任何对应于 C 或 C++ 的函数或运算符,至少在稳定版本中是这样。

Heap结构和 ptr模块(标有experimental)这种东西要看什么?

我知道这些数据结构已经在语言中了。这是为了学习。

最佳答案

虽然真的不建议这样做,但您可以像在 C 中习惯的那样使用 mallocfree。它不是很有用,但它是这样的看起来:

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/

相关文章:

iphone - 解析时的内存问题

iphone - 僵尸报告 : message sent to deallocated instance

generics - 通用可克隆/可移动参数作为函数参数

string - 为什么我不能像在 trim_right_matches() 中那样在 trim_matches() 中使用 &str?

rust - 为什么我不能通过迭代器可变引用来改变切片

rust - 如何在 .unzip() 返回的每个迭代器上使用 .collect()?

memory - 分页怎么有内部碎片没有外部碎片?

linux - 什么是linux中的内存回收

python - 使用过多内存的大量 Python 整数集

rust - 如何使用 Serde 在反序列化期间转换字段?