stanford cs110l lec1

1.1 gets函数与栈帧

  • gets函数不安全
  • 启动gdb
  • rip寄存器存放的是下一条指令要执行的地址,rbp寄存中

1.1 内存安全问题与解决方式

  • gets函数在栈区留有的buffer,存在数据越界的问题,即使是专业的工程师也会出现类似的问题。

如何找到或者避免类似的安全问题?

  • 动态分析,也就是测试程序,但是难以保证测试到全部的边界情况
  • 静态分析,数学上可以证明,难以发现所有问题
  • 写出不一样的代码,也就是创造一些框架与习惯,使得错误出现的机率大大降低。这就是rust的设计哲学,虽然这可能会增加学习rust的学习成本
  • 沙盒,承认这些错误会发生,但是将后果最小化,比如将程序放在浏览器中运行

课程主要内容

  • 用rust编程
  • 如何找到或者避免C/C++中的错误
  • Rust的类型系统如何避免常见的内存安全问题
  • 如何建造好的代码
  • 避免多线程陷阱
  • 避免多处理器陷阱
  • 付诸实践,实现一个网络系统

1.2 GC

  • GC的坏处
    • 消耗资源,不论gc如何优化,总是要有不小的内存开销
    • 破坏性,一般GC需要停下当前的程序
    • 非确定性,无法知晓下一次GC的时机
    • 阻止了手动优化,有些时候你需要使得你将使用的数据,实现高缓存性能。但是这个时候GC会按照一般的处理,回收相关内存。
    • 不只是性能问题,GC并没有完全隔绝race condition,内存安全问题仍然存在

那么Rust的设计目标是,实现高效且安全的程序编写

posted @ 2022-06-02 14:46  抿了抿嘴丶  阅读(35)  评论(0编辑  收藏  举报