memory-management - 在运行时在堆上分配缓冲区

标签 memory-management rust heap-memory ownership

我正在通过编写简单的二进制解码器来学习 Rust。

我将 BufferedReaderbyteorder crate 一起使用读取数字,但我在读取字节缓冲区时遇到问题。

我想将字节数据读入运行时分配的缓冲区。 然后我想将这个缓冲区的所有权传递给一个结构。当不再使用结构时,应释放缓冲区。

除了一些 Vec::with_capacity() hack 之外,似乎没有办法在堆上分配大小在运行时确定的数组。有什么想法可以用适当的 Rust 语义来实现吗?

最佳答案

这将创建一个预分配的可变 500MB 字节缓冲区,存储在堆上,不需要不安全的 rust:

//正确

let mut buffer = vec![0_u8; 536870912];

请注意,下面的代码不是一个好主意,很可能会导致堆栈溢出,因为缓冲区是在装箱并移动到堆之前在堆栈上创建的。

//不正确 - 使用了堆栈

let mut bytes: Box<[u8]> = Box::new([0_u8; 536870912])

//不正确 - 慢

let mut bytes = Vec::with_capacity(536870912);
for _ in 0..bytes.capacity() {
    bytes.push(0_u8);
}

关于memory-management - 在运行时在堆上分配缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414567/

相关文章:

ios - 发送到已释放实例的消息 - 视为属性

c++ - 如何在不使指向它的指针失效的情况下增加缓冲区?

python - 将元组的 Rust 向量转换为 C 兼容结构

multithreading - Rust 如何处理终止线程?

java - Java什么时候调用垃圾收集器

ios 10 应用程序在执行期间在内存中包含敏感数据

erlang - spawn/1 和共享外部变量

python - 什么时候不应该在 Python 中使用 self 约定?

c++ - 我应该返回对堆对象的引用还是返回值?

rust - 使用Rust的 crate 正则表达式,如何获取组的职位?