【发布时间】:2015-05-28 10:23:53
【问题描述】:
假设我们有一个单一地址空间的操作系统。为了保持稳定性,我们需要对用户应用程序强制进行内存保护,例如禁止使用“不安全”关键字,除非用户有特殊能力。
我们的用户需要有一种方法可以安全地从/向字节流(例如文件)读取/写入任意结构。当然,我们讨论的是不包含引用的结构(否则我们会失去内存安全性)。
现在我尝试实现这种通用阅读器功能:
#![feature(core)]
use std::io;
use std::mem;
use std::raw;
fn read<T>(reader: &mut io::Read, dest: &mut T) -> io::Result<usize> {
let slice = raw::Slice{ data:dest, len:mem::size_of::<T>() };
let buf: &mut [u8] = unsafe { mem::transmute(slice) };
reader.read(buf)
}
上面的实现有一个严重的问题。它允许读取包含引用的结构。那么我该如何解决呢?
【问题讨论】: