如何获得Rust Vec缓冲区



我想在运行时动态分配一个数组,所以我用Vec来实现它。我想用一个原始指针来指向数组地址,如下所示:

fn alloc(&mut page: Page) {
page.data = vec![0; page.page_size].as_mut_ptr();//it's a Vec<u8>
}

我想知道指针是否直接指向vec缓冲区,长度是否正好是page.page_size

我想要的效果就像下面的C代码:

void alloc(Page* page) {
page->data = (u8*)malloc(page->page_size);
}

据我所知,在这种情况下,从vec获得的唯一保证是,当它由new()vec![]宏创建时,它将保留至少page_size字节的数据。要保留确切的字节数,请使用Vec::with_capacity()创建它。

当使用原始指针时,程序员有责任确保数据的使用寿命足够长。在本例中,vec将只存在于alloc中,因此当函数返回地址时,它将同时释放缓冲区。

最新更新