我想在运行时动态分配一个数组,所以我用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
中,因此当函数返回地址时,它将同时释放缓冲区。