除基本类型外最常用的类型是字符串String、结构体struct、枚举enum、向量Vector和字典HashMap(也叫哈希图)。string、struct、enum、vector、HashMap的数据都是在堆内存上分配空间,然后在栈空间分配指向堆内存的指针信息。函数也可以算是一种类型,此外还有闭包、trait。这些类型各有实现方式,复杂度也
幸运的是,我们可以使用 HashMap 和其他动态集合类型(如 Vec)构造全局静态值,这是通过被称为lazy_static 的第三方软件包实现的。它暴露了 lazy_static!宏,可用于初始化任何能够从程序中的任何位置全局访问的动态类型。 use std::sync::Mutex; lazy_static! { static ref ITEMS: Mutex<Vec<u64>> = { let ...
// 使用哈希表来提高查找效率usestd::collections::HashMap;fnmain(){letmutmap=HashMap::new();map.insert("one",1);map.insert("two",2);map.insert("three",3);println!("{}",map.get("two").unwrap());}// 避免不必要的内存分配fnconcat_strings(str1:&str,str2:&str)->String{letmutres...
{ // 使用 Mutex / RwLock 来提供安全的并发写访问 static ref STORE: Mutex<HashMap<&'static str, &'static [u8]>> = Mutex::new(HashMap::new()); } fn main() { let t1 = thread::spawn(move || { let mut store = STORE.lock().unwrap(); store.insert("hello", b"world"); });...
extern crate lazy_static; use std::collections::HashMap; lazy_static! { static ref VEC:Vec<u8> = vec![0x18u8, 0x11u8]; static ref MAP: HashMap<u32, String> = { let mut map = HashMap::new(); map.insert(18, "hury".to_owned()); ...
static mut MUT_BYTES: [u8; 3] = [1, 2, 3]; fn main() { MUT_BYTES[0] = 99; // 编译错误,修改静态变量是unsafe的 unsafe { MUT_BYTES[0] = 99; assert_eq!(99, MUT_BYTES[0]); } } 认为静态变量 只可以在编译期创建 必须是不可变的,修改它们是unsafe的 ...
它很显然也不能持有&mut HashMap,因为这样HttpServer类就不能持有配置表的引用了。比较容易想到的解决方法是我们不再让Database和HttpServer持有同一张配置表的引用,而是让它们各自把需要用到的字段复制到一个独立的的HashMap中。但是,这种解决方法并不算特别完美(毕竟额外多了一次复制),配置的互相剥离也使得在运行...
map(|offset| FrameTracker(self.start_ppn + offset)) } /// 将被释放的帧添加到空闲列表的尾部 /// /// 这个函数会在 [`FrameTracker`] 被 drop 时自动调用,不应在其他地方调用 pub(super) fn dealloc(&mut self, frame: &FrameTracker) { self.allocator.dealloc(frame.page_number() - self....
它很显然也不能持有&mut HashMap,因为这样HttpServer类就不能持有配置表的引用了。比较容易想到的解决方法是我们不再让Database和HttpServer持有同一张配置表的引用,而是让它们各自把需要用到的字段复制到一个独立的的HashMap中。但是,这种解决方法并不算特别完美(毕竟额外多了一次复制),配置的互相剥离也使得在运行...
还有一些 rust 的特性我并没有列出来,因为他们中的许多知识理解起来就没有太多的困扰性了,例如 trait、impl、数组、元组、enum、HashMap、mod、其他基础语法等。 当然,要成为 rust 高手,我们必须对栈内存和堆内存有非常准确的掌握,而不是仅仅只局限于知道一个概念。rust 要求我们对内存与数据类型有更精准的掌握。