当前位置: 首页 > news >正文

设计企业网站0453牡丹江信息网二手车

设计企业网站,0453牡丹江信息网二手车,公司网站文案推广怎么做,wordpress yasaer文章目录 所有权引用和借用可变引用悬垂引用 所有权 Rust通过所有权来管理内存#xff0c;最妙的是#xff0c;这种检查只发生在编译期#xff0c;因此对于程序运行期#xff0c;不会有任何性能上的损失。 使用堆和栈的性能区别#xff1a; 写入方面#xff1a;入栈比在… 文章目录 所有权引用和借用可变引用悬垂引用 所有权 Rust通过所有权来管理内存最妙的是这种检查只发生在编译期因此对于程序运行期不会有任何性能上的损失。 使用堆和栈的性能区别 写入方面入栈比在堆上分配内存要快。 因为入栈时操作系统无需分配新的空间只需要将新数据放入栈顶即可。相比之下在堆上分配内存则需要更多的工作这是因为操作系统必须首先找到一块足够存放数据的内存空间接着做一些记录为下一次分配做准备。 读取方面出栈比读取堆上的数据快。 栈数据往往可以直接存储在 CPU 高速缓存中而堆数据只能存储在内存中。访问堆上的数据比访问栈上的数据慢因为必须先访问栈再通过栈上的指针来访问内存。 因此处理器处理分配在栈上数据会比在堆上的数据更加高效。 Rust的所有权原则 Rust 中每一个值都被一个变量所拥有该变量被称为值的所有者一个值同时只能被一个变量所拥有或者说一个值只能拥有一个所有者当所有者(变量)离开作用域范围时这个值将被丢弃(drop) 简单说就是每一个值堆上的值有且只有一个所有者变量当这个变量出了作用域那么这个值也被丢弃在堆上也会丢弃。 看一段代码 fn main(){let x: str hello world;let y x;println!({},{},x,y); }这段代码并不会报错这是因为 x 在这里只是引用了字符串没有所有权所以 let y x; 是对引用的拷贝不会有所有权的转移具体看下一节 “引用与借用” 函数的传参和返回 传参 fn main() {let s String::from(hello); // s 进入作用域takes_ownership(s); // s 的值移动到函数里 // s 所以到这里不再有效let x 5; // x 进入作用域makes_copy(x); // x 应该移动函数里// 但 i32 是 Copy 的所以在后面可继续使用 x} // 这里, x 先移出了作用域然后是 s。但因为 s 的值已被移走// 所以不会有特殊操作fn takes_ownership(some_string: String) { // some_string 进入作用域println!({}, some_string); } // 这里some_string 移出作用域并调用 drop 方法。占用的内存被释放fn makes_copy(some_integer: i32) { // some_integer 进入作用域println!({}, some_integer); } // 这里some_integer 移出作用域。不会有特殊操作返回 fn main() {let s1 gives_ownership(); // gives_ownership 将返回值移给 s1let s2 String::from(hello); // s2 进入作用域let s3 takes_and_gives_back(s2); // s2 被移动到takes_and_gives_back 中,它也将返回值移给 s3 } // 这里, // s3 移出作用域并被丢弃。 // s2 也移出作用域但已被移走所以什么也不会发生。 // s1 移出作用域并被丢弃fn gives_ownership() - String { let some_string String::from(hello); // some_string 进入作用域.some_string // 返回 some_string 并移出给调用的函数 }// takes_and_gives_back 将传入字符串并返回该值 fn takes_and_gives_back(a_string: String) - String { // a_string 进入作用域a_string // 返回 a_string 并移出给调用的函数 }引用和借用 在 Rust 中获取变量的引用叫做借用。 引用x解引用*x 用在函数参数和函数返回值 fn main() {let s1 String::from(hello);let len calculate_length(s1);println!(The length of {} is {}., s1, len); }fn calculate_length(s: String) - usize {s.len() }可变引用 引用默认是不能修改值的想要修改值需要使用可变引用 fn main() {let mut s String::from(hello);change(mut s); }fn change(some_string: mut String) {some_string.push_str(, world); }要注意的是特定数据的可变引用在同一个作用域只能存在一个并且可变引用和不可变引用不能同时存在。 新旧编译器的引用作用域不同旧编译器1.31之前的引用作用域结束于最近的花括号处而新编译器的引用作用域改变为 最后一次使用的位置。 这种优化行为叫做 Non-Lexical LifeTimes(NLL). 悬垂引用 指引用指向某个值后值被释放掉指针仍然存在的情况。 在 Rust 中编译器可以确保引用永远也不会变成悬垂状态当你获取数据的引用后编译器可以确保数据不会在引用结束前被释放要想释放数据必须先停止其引用的使用。 释放引用 fn dangle() - String { // dangle 返回一个字符串的引用let s String::from(hello); // s 是一个新字符串s // 返回字符串 s 的引用 } // 这里 s 离开作用域并被丢弃。其内存被释放。// 危险// 应该更改为 fn no_dangle() - String {let s String::from(hello);s }
http://www.pierceye.com/news/983727/

相关文章:

  • 网站空间多久续一次费长春网站制作设计
  • 网站制作价格低广西网络电视
  • 平台网站建设收费烟台网站的优化
  • 如何做提卡网站vue.js wordpress
  • 国家网站备案查询系统wordpress 主题 简洁
  • 建设商业网站html什么意思
  • 网站专题建设方案江苏省建设厅网站 杨洪海
  • 通化网站建设公司南江县住房和城乡建设局网站
  • 网站的外链是什么软件开发与网站开发的区别
  • 学做网站论坛vip账户了解网站开发的背景
  • 做3个网站需要多大的服务器科凡建站
  • 网站设计制作音乐排行榜44555pd永久四色端口
  • 网站优化方案教程如何注册chn域名网站
  • 怎样建设免费网站个别网站网速慢怎么做
  • 网页设计制作音乐排行榜一键seo提交收录
  • 网站推广要我营业执照复印件conoha wordpress
  • 免费行情软件app网站排行高质量外链网站
  • 免费解析网站制作网站开发项目实战视频
  • 柳州网站建设工作室基金会网站开发方案
  • 龙海网站建设微网站如何建设
  • 手机视频网站怎么做贵阳专业做网站
  • 网站建设题库vps上的网站运行太慢
  • 化妆品网站优化沧州网站制作公司
  • 专业优定软件网站建设上海seo服务
  • 网站充值怎么做的c2c平台的产品类型
  • 阿里去要企业网站建设方案书手机设计房子的软件3d下载
  • 凡科网站登录入轻博客网站开发
  • wordpress微信机器人订阅号性价比高seo网站优化
  • 网站建设全网推广亚马逊seo搜索什么意思
  • 做网站_你的出路在哪里android app for wordpress