Rust 的基本类型有哪些,他们存在堆上还是栈上,是否可以COPY?

news/2025/2/4 4:55:44/

Rust 的基本类型主要包括以下几类:

1. 整数类型(Integer)

Rust 提供了有符号和无符号的整数类型:

  • 有符号整数(i8, i16, i32, i64, i128, isize
  • 无符号整数(u8, u16, u32, u64, u128, usize

是否实现 Copy trait?
✅ 是的,所有整数类型都实现了 Copy,因此它们在赋值或传递时不会发生所有权转移。

存储位置:
✅ 由于整数是固定大小的标量,它们通常存储在上。


2. 浮点数类型(Floating-Point)

Rust 仅提供 f32f64 两种浮点数类型。

是否实现 Copy trait?
✅ 是的,f32f64 都实现了 Copy

存储位置:
✅ 存储在上。


3. 布尔类型(Boolean)

Rust 使用 bool 类型表示布尔值(truefalse)。

是否实现 Copy trait?
✅ 是的,bool 实现了 Copy

存储位置:
✅ 存储在上。


4. 字符类型(Character)

Rust 使用 char 存储单个 Unicode 字符,占 4 字节(UTF-32)。

是否实现 Copy trait?
✅ 是的,char 实现了 Copy

存储位置:
✅ 存储在上。


5. 元组(Tuple)

元组可以包含多个不同类型的数据,例如:

rust">let tup: (i32, f64, char) = (42, 3.14, 'R');

是否实现 Copy trait?
仅当所有元素都实现了 Copy 时,元组才会自动实现 Copy
例如:

rust">let t1: (i32, f64) = (42, 3.14); // ✅ Copy
let t2: (String, i32) = (String::from("Hello"), 42); // ❌ 不是 Copy

存储位置:
如果所有元素都是栈上数据,元组整体存储在栈上
如果包含堆数据(如 String),整个元组存储在栈上,但 String 的内容在堆上


6. 数组(Array)

数组是固定长度的多个相同类型元素的集合:

rust">let arr: [i32; 3] = [1, 2, 3];

是否实现 Copy trait?
如果元素类型实现了 Copy,数组也实现 Copy

存储位置:
数组整体存储在栈上(因为它的大小在编译时已知)。


7. 切片(Slice)

切片是对数组的一部分的引用:

rust">let arr = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr[1..3]; // `[2, 3]`

是否实现 Copy trait?
❌ 切片本身是引用(&[T]),所以它没有 Copy,但 &T 这样的引用本身实现了 Copy

存储位置:
切片本身存储在栈上,但它指向的数据可能在堆上或栈上


8. String&str

  • String 是可变的、堆分配的字符串类型。
  • &str 是对 String 或字符串字面值的不可变引用。

是否实现 Copy trait?
String 不实现 Copy(因为它在堆上)。
&str 实现 Copy(因为它是引用)。

存储位置:
String 本身(指针、长度、容量)存储在上,但字符串内容存储在上。
&str 引用存储在上,指向的字符串可能在(字面值)或String)上。


9. 结论

类型Copy 实现?主要存储位置
i32 等整数✅ 是
f32/f64✅ 是
bool✅ 是
char✅ 是
(i32, f64)(只包含 Copy 类型)✅ 是
(String, i32)(包含堆数据)❌ 否栈 + 堆
[i32; 3](固定大小数组)✅ 是
[String; 3](堆数据数组)❌ 否栈 + 堆
&str✅ 是栈(但指向的可能在堆上)
String❌ 否栈 + 堆

Rust 的基本类型中,所有标量类型(整数、浮点数、布尔、字符)和只包含 Copy 类型的复合类型(元组、数组)都存储在栈上,并且都实现了 Copy
StringVec<T> 这样涉及堆数据的类型不会自动 Copy,它们的内容存储在堆上


http://www.ppmy.cn/news/1569142.html

相关文章

爱快 IK-X9 吸顶AP 简单开箱评测和拆解,三频WiFi7,BE5000,2.5G网口

爱快&#xff08;iKuai&#xff09; IK-X9 三频高密度吸顶AP 简单开箱评测和拆解&#xff0c;三频Wi-Fi7&#xff08;2.4GHz&#xff1a;688Mbps、5.1GHz&#xff1a;2882Mbps、5.8GHz&#xff1a;1441Mbps&#xff09;&#xff0c;BE5000&#xff0c;2.5G网口 用的爱快系统做…

一文了解DeepSeek

1. DeepSeek 的起源 创立时间&#xff1a;DeepSeek 于 2023 年由中国的梁文锋创立。 V3 模型训练成本&#xff1a;最终训练成本为 600 万美元。 开源&#xff1a;DeepSeek 提供开源版本。 流行度&#xff1a;DeepSeek R1 模型成为 Apple 应用商店中下载量最高的应用。 2. …

Anaconda使用教程 如何conda配置多版本Python环境

配置anaconda参考anaconda的安装和使用&#xff08;管理python环境看这一篇就够了&#xff09;-CSDN博客 Anaconda使用教程 主要用的两个为Anaconda Prompt 和Anaconda Navigator 打开cmd 第一次安装配置好conda的得先执行 conda init才能用 以后的创建环境和环境切换&…

OpenAI 实战进阶教程 - 第一节:OpenAI API 架构与基础调用

目标 掌握 OpenAI API 的基础调用方法。理解如何通过 API 进行内容生成。使用实际应用场景帮助零基础读者理解 API 的基本用法。 一、什么是 OpenAI API&#xff1f; OpenAI API 是一种工具&#xff0c;允许开发者通过编程方式与 OpenAI 的强大语言模型&#xff08;例如 gpt-…

React中useState()钩子和函数式组件底层渲染流程详解

useState()钩子底层渲染流程 React中useState的底层渲染机理。首先&#xff0c;我知道useState是React Hooks的一部分&#xff0c;用于在函数组件中添加状态。但底层是如何工作的呢&#xff1f;可能涉及到React的调度器、Fiber架构以及闭包等概念。 首先&#xff0c;React使用F…

c++ map/multimap容器 学习笔记

1 map的基本概念 简介&#xff1a; map中所有的元素都是pair pair中第一个元素是key&#xff08;键&#xff09;&#xff0c;第二个元素是value&#xff08;值&#xff09; 所有元素都会根据元素的键值自动排序。本质&#xff1a; map/multimap 属于关联式容器&#xff0c;底…

通信方式、点对点通信、集合通信

文章目录 从硬件PCIE、NVLINK、RDMA原理到通信NCCL、MPI原理&#xff01;通信实现方式&#xff1a;机器内通信、机器间通信通信实现方式&#xff1a;通讯协调通信实现方式&#xff1a;机器内通信&#xff1a;PCIe通信实现方式&#xff1a;机器内通信&#xff1a;NVLink通信实现…

25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表

目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到…