Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 62.4MB ·虚拟内存 1299.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Rust 安全代码
安全与非安全代码对比 安全与非安全代码交互 非安全Rust能做什么 编写非安全代码数据布局
repr(Rust) 类型中的奇行种 可选的数据表达方式所有权
所有权 引用 别名 生命周期 生命周期的局限 省略生命周期 无界生命周期 高阶trait边界 子类型和变性 Drop检查 幽灵数据 分解借用类型转换
类型转换 强制类型转换 点操作符 显式类型转换 变形未初始化内存
未初始化内存 安全方式 Drop标志 非安全方式资源管理
基于所有权的资源管理 构造函数 析构函数 泄露展开
展开 异常安全性 污染并发
并发 竞争 Send和Sync 原子操作实现 Vec
实现 Vec 布局 内存分配 push和pop 回收资源 DeRef 插入和删除 IntoIter RawVec Drain 处理零尺寸类型 最终代码FFI
FFI我们要把所有的内容汇总起来,从头开始写一个std::Vec
。因为所有编写非安全代码的工具都是不稳定的,这个项目只保证短期有效(从Rust 1.9.0开始)。除了分配器API,我们要用到的大部分不稳定代码都尽量保证和最新的形式一致。
不过,如果可能的话,我们会尽量避免使用不稳定代码。特别是,我们不会使用内在函数(intrinsics),虽然它可以使代码更好更高效,但它是永久不稳定的功能。尽管许多的内在函数已经在一些地方稳固使用了(std::ptr和str::mem使用了很多内在函数)。
也就是说我们的实现不会借助所有可能的优化手段,即使部分手段其实已经比较成熟了。我们还会深入探究种种内在的细节,哪怕实际问题并不需要这样做。
你想要高级的,我们就给你高级的。
我们先来看看结构体的布局。Vec由三部分组成:一个指向分配空间的指针、空间的大小、以及已经初始化的元素的数量。简单来说,我们的设计只要这样:pub struct Vec<T> { ptr: *mut T, c ...
全部【编程教程】内容源自网络,仅供学习用途,若有遗漏或版权任何问题,请及时【联系我们】 ,按下 Ctrl+D 或 ⌘+D 收藏本站。