016 Rust死灵书之安全方式内存初始化
本系列录制的视频主要放在B站上Rust死灵书学习视频
Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source
介绍
所有运行期分配的内存开始时都是 "未初始化"的。Rust 提供了处理未初始化内存的方式,既有安全的方式也有非安全的方式。
安全方式
所有栈上的变量在显式赋值之前都是未初始化的,但是Rust禁止程序员在赋值之前读取这些变量。
//例子1
fn main() {let i: i32;//println!("i = {}", i); //errorif true {i = 1;println!("i = {}", i); }//println!("i = {}", i); //error
}
//例子2
fn main() {let x: i32;loop {// Rust不知道这个分支会被无条件执行//因为它依赖于实际值if true {// 但是它确实知道循环只会有一次,因为我们会无条件break// 所以x不需要是可变的x = 0;break;}}// 它也知道如果没有执行break的话,代码不会运行到这里// 所以在这里x一定已经被初始化了println!("{}", x);}
如果值从变量中移出且变量类型不是 Copy,那么变量逻辑上处于未初始化状态。
fn main() {//如果值从变量中移出且变量类型不是 Copy,那么变量逻辑上处于未初始化状态let x = 0;let y = Box::new(0);let z1 = x; // x仍然是合法的,因为i32是Copylet z2 = y; // y现在逻辑上未初始化,因为Box不是Copyprintln!("x = {}", x);//println!("y = {}", y);println!("z1 = {}", z1);println!("z2 = {}", z2);//y = Box::new(1); // 重新初始化y, error,需要将y修改成mutprintln!("Hello, world!");
}
016 Rust死灵书之安全方式内存初始化相关推荐
- 【嵌入式开发】ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
文章目录 一. 内存 简介 1. 两大内存分类 ( 1 ) DRAM 简介 ( 定期刷新 | 速度慢 | 成本低 ) ( 2 ) SRAM 简介 ( 不需刷新 | 存取速度快 | 功耗大 | 成本高 ...
- 018 Rust死灵书之非安全方式初始化内存
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 主 ...
- 027 Rust死灵书之Vec内存分配
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source V ...
- 021 Rust死灵书之异常安全性
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 异 ...
- 025 Rust死灵书之原子操作
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 原 ...
- 024 Rust死灵书之Send和Sync
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source S ...
- 023 Rust死灵书之并发、竞争
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 并 ...
- linux内核初始化卡死,armlinux内核启动--内存初始化管理
linux版本:2.6.36 相关数据结构 arch/arm/include/asm/setup.h #ifdef CONFIG_ARCH_LH7A40X # define NR_BANKS 16 # ...
- 内存系列三:内存初始化浅析
本篇承接上两篇文章,继续介绍DDR内存在固件中如何初始化,以及如何提高初始化的效率等等. 小张上次回去后,好久都没来找我,我以为他对内存知识已经不感兴趣了,没想到他今天又约我见面.我来到上次的咖啡馆, ...
最新文章
- Cocos2D粒子发射器的纹理
- VTK:图片之ImageShiftScale
- stm32定时器中断类型分析
- 人工通道会取消吗_二七政策将用于ETC?高速或将取消人工收费通道
- 深度学习框架 各种模型下载集合 -- models list
- 实战篇:如何用Keras建立神经网络(附全部代码) 1
- iOS开发那些事--nib、xib与故事板的关系
- openGL编程指南第一章
- 不用工具直接从微软官网下载Win10正式版ISO镜像
- debug——生成log
- Spring Boot application properties或application yml相关配置
- nodemon运行 提示错误:无法加载文件 C:\Users\gxf\AppData\Roaming\npm\nodemon.ps1。
- 之前总结的今天给大分享一下iOS
- 计算机应用无法打开,为什么电脑界面的部分软件无法打开
- 自创银河系,转转转转转----Java球类的椭圆轨迹运动----立体效果
- linux 学习笔记
- tp5 php里如何打印变量,TP5系统变量输出
- FFmpeg音视频核心技术精讲与实战-李超-ffmpeg开发使用笔记2
- 这届欧洲杯有点凉?但中国广告主绝不认输
- 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...
热门文章
- eclipse使用的常见问题
- python npv 计算公式_Python for NPV and IRR
- 2018运动场景内运动检测调研文章
- 解决 There is no getter for property named ‘null‘ in ‘class 报错
- Cannot get a STRING value from a NUMERIC cell
- 2018亚洲区域赛焦作站参赛总结
- java小组项目口号,小组口号霸气押韵大全(精选60句)
- android 蓝牙打印代码,分享一个b4a下安卓操作蓝牙打印机的代码
- 高频算法题冒险之旅精讲(一)之LeetCode小牛试刀五道题
- 100+道Java经典面试题(面中率高)