本系列录制的视频主要放在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死灵书之安全方式内存初始化相关推荐

  1. 【嵌入式开发】ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )

    文章目录 一. 内存 简介 1. 两大内存分类 ( 1 ) DRAM 简介 ( 定期刷新 | 速度慢 | 成本低 ) ( 2 ) SRAM 简介 ( 不需刷新 | 存取速度快 | 功耗大 | 成本高 ...

  2. 018 Rust死灵书之非安全方式初始化内存

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 主 ...

  3. 027 Rust死灵书之Vec内存分配

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source V ...

  4. 021 Rust死灵书之异常安全性

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 异 ...

  5. 025 Rust死灵书之原子操作

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 原 ...

  6. 024 Rust死灵书之Send和Sync

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source S ...

  7. 023 Rust死灵书之并发、竞争

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 并 ...

  8. linux内核初始化卡死,armlinux内核启动--内存初始化管理

    linux版本:2.6.36 相关数据结构 arch/arm/include/asm/setup.h #ifdef CONFIG_ARCH_LH7A40X # define NR_BANKS 16 # ...

  9. 内存系列三:内存初始化浅析

    本篇承接上两篇文章,继续介绍DDR内存在固件中如何初始化,以及如何提高初始化的效率等等. 小张上次回去后,好久都没来找我,我以为他对内存知识已经不感兴趣了,没想到他今天又约我见面.我来到上次的咖啡馆, ...

最新文章

  1. Cocos2D粒子发射器的纹理
  2. VTK:图片之ImageShiftScale
  3. stm32定时器中断类型分析
  4. 人工通道会取消吗_二七政策将用于ETC?高速或将取消人工收费通道
  5. 深度学习框架 各种模型下载集合 -- models list
  6. 实战篇:如何用Keras建立神经网络(附全部代码) 1
  7. iOS开发那些事--nib、xib与故事板的关系
  8. openGL编程指南第一章
  9. 不用工具直接从微软官网下载Win10正式版ISO镜像
  10. debug——生成log
  11. Spring Boot application properties或application yml相关配置
  12. nodemon运行 提示错误:无法加载文件 C:\Users\gxf\AppData\Roaming\npm\nodemon.ps1。
  13. 之前总结的今天给大分享一下iOS
  14. 计算机应用无法打开,为什么电脑界面的部分软件无法打开
  15. 自创银河系,转转转转转----Java球类的椭圆轨迹运动----立体效果
  16. linux 学习笔记
  17. tp5 php里如何打印变量,TP5系统变量输出
  18. FFmpeg音视频核心技术精讲与实战-李超-ffmpeg开发使用笔记2
  19. 这届欧洲杯有点凉?但中国广告主绝不认输
  20. 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...

热门文章

  1. eclipse使用的常见问题
  2. python npv 计算公式_Python for NPV and IRR
  3. 2018运动场景内运动检测调研文章
  4. 解决 There is no getter for property named ‘null‘ in ‘class 报错
  5. Cannot get a STRING value from a NUMERIC cell
  6. 2018亚洲区域赛焦作站参赛总结
  7. java小组项目口号,小组口号霸气押韵大全(精选60句)
  8. android 蓝牙打印代码,分享一个b4a下安卓操作蓝牙打印机的代码
  9. 高频算法题冒险之旅精讲(一)之LeetCode小牛试刀五道题
  10. 100+道Java经典面试题(面中率高)