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

单页网站版权显示wordpress恶意注册插件

单页网站版权显示,wordpress恶意注册插件,网站八个,商丘 峰少 seo博客一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道#xff0c;如何从内存中申请空间来存放程序的运行内容#xff0c;如何在不需要的时候释放这些空间#xff0c;成为所有编程语言设计的难点之一。 主要分为三种…一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道如何从内存中申请空间来存放程序的运行内容如何在不需要的时候释放这些空间成为所有编程语言设计的难点之一。 主要分为三种流派 (1)垃圾回收机制(GC)在程序运行时不断寻找不再使用的内存典型代表Java、Go (2)手动管理内存的分配和释放, 在程序中通过函数调用的方式来申请和释放内存典型代表C (3)通过所有权来管理内存编译器在编译时会根据一系列规则进行检查。避免手动或者运行时垃圾回收带来的额外成本。 讲到内存在编程语言中都会讲到栈、堆栈和堆的结构特性决定了一些值适合放在哪些位置能够有更好的性能和空间效率。 (1)栈主要是存储局部变量栈中的所有数据都必须占用已知且固定大小的内存空间。 优点用完即出也很好出性能很好 缺点无法存储大小未知或者可能变化的数据。 (2)堆对于大小未知或者可能变化的数据我们需要将它存储在堆上。 优点空间大能够存储大小未知或者可能变化的数据。 缺点数据组织较为复杂需要回收内存空间。 2、Rust所有权是什么 先来介绍所有权的几个概念 Rust 中每一个值都被一个变量所拥有该变量被称为值的所有者且有且仅有一个所有者。 当所有者(变量)离开作用域范围时这个值将被丢弃(drop) 特别地为了便于理解我认为基本数据类型的值**比如i32、boolean等基本类型有别的机制处理这种基本类型的所有权问题会直接拷贝栈上数据新生成一个值把新值的所有权给新变量不会把旧值的所有权给新变量(新拥有者)没有发生所有权变化的现象。这种叫做Copy行为。 先说一下字符串类型注意我说的是字符串类型对于 let s hello;上面这段代码中的“hello”可以理解成Java中的字符串字面值不是存储在堆上的可以想象成存储在一个文件里的。和字符串类型不是一个东西对于这种值可以理解成没有所有权的概念大家都只是持有一个引用它的指针。 那么 什么是字符串类型的数据比如 let s1 String::from(hello); let s2 s1;我们来分析上述代码的 第一行代码 String::from(“hello”); 会在堆中找到一片地址空间存储字符串类型数据hello。并返回该堆中数据的地址、长度、容量等数据此时堆中的数据就叫做值。 然后在栈中生成一个结构体变量s1该结构体就是字符串结构保存了堆中数据的地址、长度、容量等数据。s1变量是堆中数据(值)的拥有者。 第二行代码 let s2 s1; 这种行为就是将s1的值的所有权移交给了s2,即堆中数据hello此时的拥有者是变量上s2s1已经没有hello的所有权我们不能再通过s1去访问或者修改堆中数据hello。 如果此时想通过s1再次访问堆中数据hello就会报错 fn main() {let s1 String::from(hello);let s2 s1;println!({}, world!, s1);}error[E0382]: borrow of moved value: s1-- src/main.rs:6:26| 3 | let s1 String::from(hello);| -- move occurs because s1 has type String, which does not implement the Copy trait 4 | let s2 s1;| -- value moved here 5 | 6 | println!({}, world!, s1);| ^^ value borrowed here after move| note: this error originates in the macro $crate::format_args_nl which comes from the expansion of the macro println (in Nightly builds, run with -Z macro-backtrace for more info) help: consider cloning the value if the performance cost is acceptable再来说一下这样移交所有权有什么好处。 当变量离开作用域后Rust 会自动调用 drop 函数并清理变量的堆内存。不过由于两个 String 变量指向了同一位置。这就有了一个问题当 s1 和 s2 离开作用域它们都会尝试释放相同的内存。这是一个叫做 二次释放double free 的错误也是之前提到过的内存安全性 BUG 之一。两次释放相同内存会导致内存污染它可能会导致潜在的安全漏洞 可以理解成所有权移交之后就可以大胆放心的抛弃先前的拥有者。来个图加深一下印象 s1不再指向堆中数据s2指向堆中数据 3、我就不想移交所有权我又想生成一个新变量指向相同数据 这里可以用到深拷贝即在堆中生成一份相同的数据赋给新变量。如代码 fn main() {let s1 String::from(hello);let s2 s1.clone();println!({}, world!, s1);}但是这么做是有性能消耗的因为你需要复制一份数据万一你这个数据非常大复制起来非常耗时耗资源 而对于栈上变量直接都是深拷贝其实不是叫深拷贝是达到深拷贝的效果但是Rust叫做Copy 这里可以给出一个通用的规则 任何基本类型的组合可以 Copy 不需要分配内存或某种形式资源的类型是可以 Copy 的。如下是一些 Copy 的类型 所有整数类型比如 u32布尔类型bool它的值是 true 和 false所有浮点数类型比如 f64 字符类型char元组当且仅当其包含的类型也都是 Copy 的时候。比如(i32, i32) 是 Copy 的但 (i32, String) 就不是不可变引用 T 但可变引用 mut T 是不可以 Copy的 3、函数传参和返回值都是会移交所有权的 fn main() {let s String::from(hello); // s 进入作用域takes_ownership(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 移出作用域。不会有特殊操作你可以尝试在 takes_ownership 之后再使用 s看看如何报错例如添加一行 println!(“在move进函数后继续使用s: {}”,s);。 有时我就想用一下老是移来移去多麻烦下篇我们讲引用与借用
http://www.pierceye.com/news/557344/

相关文章:

  • 鹰潭做网站的建筑工程公司取名
  • 网站建设与运营实验开发一个网站的成本
  • 自考网站建设与管理资料郑州高端网站建设哪家好
  • 网站设计开发维护设计云网站
  • 北京工商局网站怎么做增资h5个人页面制作
  • 北京好的网站建设12个 网站模板 管理办法
  • vs2017 如何做网站最近一周新闻热点大事件
  • wordpress建站欣赏解释网站为什么这样做
  • 网站建设模板登录界面七牛wordpress插件
  • 手机 网站制作上饶企业网站建设
  • 网站建设需要知道什么软件深达网站制作深圳公司
  • 怎么做监控网站Wordpress页面函数
  • 梁平网站建设百度搜索排名优化哪家好
  • 芜湖网站建设芜湖狼道cad精品课网站建设
  • qq空间认证的网站后台根目录seo和sem是什么意思
  • 中国建设集团门户网站装修公司做网站
  • 东莞seo建站公司哪家好怎么把网站推广出去
  • 网站建设什么时候好豆瓣wordpress
  • 动漫网站设计报告最好的wordpress商城主题
  • 陕西餐饮加盟网站建设如何做一个网站代码
  • 合浦住房和城乡规划建设局网站网页设计培训机构学什么好
  • 做网站需要注意的地方模板ppt
  • 自己建立公司网站自助建站系统
  • 淅川微网站开发wordpress 侧边收起
  • 网站建设企业哪家好乐清站在那儿
  • 网站建设公司人员配置做网站衡水
  • 成都网站建设939seo搜索优化软件
  • 企业网站建设哪家好seo检测
  • 网站建设的案例教程视频教程兴平市住房和城乡建设局门户网站
  • cps推广网站怎么制作网站图片不显示