当前位置: 首页 > 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.zqtcl.cn/news/983727/

相关文章:

  • 自己怎么建网站网站的seo 如何优化
  • 博客网站模板下载如何自学美工
  • 哪个免费建站好专业seo要多少钱
  • 做3d建模贴图找哪个网站珠海建设网站公司简介
  • 网站开发过程前端后端qq刷赞网站咋做
  • 湘潭高新区建设局网站旅游做攻略的网站有哪些
  • wordpress网站云备份网站模块插件是怎么做的
  • 郑州市城乡建设规划网站深圳十佳设计公司排名
  • 上海建设项目环保验收公示网站两新支部网站建设
  • 网站开发移动端网络系统软件应用与维护
  • 浙江网站建设营销网站后台管理系统一般用户名是什么
  • 网站 空间 租用wordpress搬家需要修改
  • 做网站推广怎么找客户网站换空间 seo
  • ipad网站开发seo哪家强
  • 昆明网站建设猫咪科技公司资料模板
  • 网站系统开发做网站需要填什么
  • 网站的数据库丢失建筑素材网
  • 个人网站做短视频pathon能做网站开发吗
  • 客户网站制作管理系统网站程序 wap pc 同步
  • 天津手动网站建设调试百度医院网站建设
  • ppt网站源码今天哈尔滨最新通告
  • asp网站乱码广州制作网页设计
  • 调用别人网站的数据库如何开网店卖自己的东西
  • 个人网站做影视网站开发学什么专业
  • 企业名称注册查询官网入口免费seo网站推广
  • 浙江门户网站建设公司个体工商户查询
  • 做网站的注意点赛事竞猜网站开发
  • 现在流行用什么语言做网站ppt设计教程网
  • 高端网站哪种好培训机构不退钱最怕什么举报
  • 青岛个人建站模板wordpress没有链接