抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Abstract

Preface

Overview

  • NonNull<T>
    • 创建的时候使用*mut T创建: NonNull::new(*mut T)
    • 假设说包裹的指针非空
  • mem::forget()

小工具

火焰图

1
2
$ cargo install flamegraph
$ cargo framegraph

查看asm

输出rust和对应汇编代码

1
2
$ cargo install cargo-asm
$ cargo asm --rust path::to::a::function

Cell vs RefCell vs Cell

  • 都可以在没有所有权, 没有可变引用的情况下(即进有不可变引用)做内部可变
  • 但不是都能通过不可变引用&T拿到内部数据的&mut
    • Cell, RefCell都没有办法在{不获取所有权/非可变引用}的情况下获取到&mut的
      • 而很多情况我们只能拿到不可变引用且拿不到所有权: 如静态变量
      • 而UnsafeCell可以通过get()获取到裸指针然后转换成&mut

评论