 Rust 程序设计语言 简体中文版 1.85.0堆是缺乏组织的:当向堆放入数据时,你要请求一定大小的空间。内存分配器 (memory allocator)在堆的某处找到一块足够大的空位,把它标记为已使用,并返 回一个表示该位置地址的 指针(pointer)。这个过程称作 在堆上分配内存 (allocating on the heap),有时简称为 “分配”(allocating)。(将数据推入栈中并不 被认为是分配)。因为指向放入堆中数据的指针是已知的并且大小是固定的,你可以 为何数据并不是你想象中的那 样。 悬垂引用(Dangling References) 在具有指针的语言中,很容易通过释放内存时保留指向它的指针而错误地生成一个悬垂指针 (dangling pointer)—— 指向可能已被分配给其他用途的内存位置的指针。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂引用:当你拥有一些数据的引用,编译器确保数 据不会在其引用之前离开作用域。 让我们尝试创建一个悬垂引用,看看 struct IpAddr { kind: IpAddrKind, address: String, } let home = IpAddr { kind: IpAddrKind::V4, address: String::from("127.0.0.1"), }; let loopback =0 码力 | 562 页 | 3.23 MB | 26 天前3 Rust 程序设计语言 简体中文版 1.85.0堆是缺乏组织的:当向堆放入数据时,你要请求一定大小的空间。内存分配器 (memory allocator)在堆的某处找到一块足够大的空位,把它标记为已使用,并返 回一个表示该位置地址的 指针(pointer)。这个过程称作 在堆上分配内存 (allocating on the heap),有时简称为 “分配”(allocating)。(将数据推入栈中并不 被认为是分配)。因为指向放入堆中数据的指针是已知的并且大小是固定的,你可以 为何数据并不是你想象中的那 样。 悬垂引用(Dangling References) 在具有指针的语言中,很容易通过释放内存时保留指向它的指针而错误地生成一个悬垂指针 (dangling pointer)—— 指向可能已被分配给其他用途的内存位置的指针。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂引用:当你拥有一些数据的引用,编译器确保数 据不会在其引用之前离开作用域。 让我们尝试创建一个悬垂引用,看看 struct IpAddr { kind: IpAddrKind, address: String, } let home = IpAddr { kind: IpAddrKind::V4, address: String::from("127.0.0.1"), }; let loopback =0 码力 | 562 页 | 3.23 MB | 26 天前3
共 1 条
- 1













