Rust 程序设计语言 简体中文版 1.85.0
为了演示所有权的规则,我们需要一个比第三章 “数据类型” 中讲到的都要复杂的数据类型。 前面介绍的类型都是已知大小的,可以存储在栈中,并且当离开作用域时被移出栈,如果代码 的另一部分需要在不同的作用域中使用相同的值,可以快速简单地复制它们来创建一个新的独 立实例。不过我们需要寻找一个存储在堆上的数据来探索 Rust 是如何知道该在何时清理数据 的,而 String 类型就是一个很好的例子。 我们会专注于 String 与所有权 从分配器总共获取了多少 字节的内存。长度与容量的区别是很重要的,不过在当前上下文中并不重要,所以现在可以忽 略容量。 当我们将 s1 赋值给 s2,String 的数据被复制了,这意味着我们从栈上拷贝了它的指针、长 度和容量。我们并没有复制指针指向的堆上数据。换句话说,内存中数据的表现如图 4-2 所 示。 72/562Rust 程序设计语言 简体中文版 s1 name value ptr len 这样就解决了我们的问题!因为只有 s2 是有效的,当其离开作用域,它就释放自己的内存, 完毕。 另外,这里还隐含了一个设计选择:Rust 永远也不会自动创建数据的 “深拷贝”。因此,任何 自动的复制都可以被认为是对运行时性能影响较小的。 作用域与赋值 作用域、所有权和通过 drop 函数释放内存之间的关系反过来也同样成立。当你给一个已有的 变量赋一个全新的值时,Rust 将会立即调用 drop0 码力 | 562 页 | 3.23 MB | 10 天前3人工智能安全治理框架 1.0
生产关系的大幅改变,加速重构传统行业模式,颠覆传统的就业观、生育观、 教育观,对传统社会秩序的稳定运行带来挑战。 (c)未来脱离控制的风险。随着人工智能技术的快速发展,不排除人工 智能自主获取外部资源、自我复制,产生自我意识,寻求外部权力,带来谋求 与人类争夺控制权的风险。 4. 技术应对措施 针对上述安全风险,模型算法研发者、服务提供者、系统使用者等需从 训练数据、算力设施、模型算法、产品服务、应用场景各方面采取技术措施予0 码力 | 20 页 | 3.79 MB | 29 天前3
共 2 条
- 1