C++的情况

C++把内存使用分为两种情况:值对象和指针对象。值语义的对象超出作用域会自动调用析构函数销毁,传递或者赋值的时候会进行一次拷贝。指针语义则交给人肉来管理,或者使用智能指针来引用计数。

值对象在传递赋值中拷贝一次比较浪费,所以C++后来有了移动构造函数。值在移动以后,关联的数据移动到新值。

Rust是怎么做的

Rust则是在C++的基础上进一步优化。Rust的对象有一个所有者,和多个引用。

Rust只允许值有一个所有者,传递和赋值会导致所有权移动。这看起来像C++的unique_ptr,但实际上更像C++的移动语义。也就是说C++拷贝是隐式的移动是显式的,Rust移动是隐式的。当然Rust在这里有编译器的静态分析,没有运行时开销。

很多地方并不想移动值,只是借用一下,Rust引入了引用的概念,来表达指针语义。一个常见内存问题是指针指向了一个无效的内存地址,Rust却没这个问题。Rust编译器强制让你证明值的生命周期大于它的引用的生命周期。有些编译器搞不清楚的地方需要添加生命周期标记,来告诉编译器。

获取引用是把一个值取地址的过程,是很严肃的。Rust核心的地方就是在这里做了限制,保证了内存安全。

Rust的局限性

即便有了复杂的所有权和生命期机制,但遇见复杂的情况还要回到引用计数。

既要零开销抽象,又要内存安全,那么付出的代价就是代码可读性变差。所以说天下没有免费的午餐、鱼与熊掌不可兼得。希望rust能增强生命周期自动推断,减少人工标注。

rust8G内存够不够用_Rust是如何做到内存安全的相关推荐

  1. 计算机专业买笔记本8g内存够吗,笔记本电脑8g内存够用吗_笔记本8G内存够不够用-win7之家...

    很多用户在购买电脑的时候,都喜欢看一下内存容量,有不少笔记本电脑用户想要买8g内存,但是不知道8g内存够用吗?对于一般的用户来说,其实8G内存可以满足日常使用,用户可以正常浏览网页.玩一般网游和普通单 ...

  2. rust8G内存够不够用_小米10运行内存8GB和12GB有什么区别,买哪个更划算?

    小米10采用了全新Kryo 585架构的骁龙865处理器以及6.67英寸的AMOLED双曲面屏幕.运行内存采用LPDDR5的高速内存,分为8GB和12GB两种选择.机身存储采用UFS3.0高速存储,有 ...

  3. rust8G内存够不够用_多线程?怎么用?

    Java线程:概念与原理 操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可 ...

  4. 8g内存学习计算机专业够吗,电脑8g内存够用吗_win108g内存够吗-系统城

    2018-02-23 15:41:57 浏览量:15524 我们知道操作系统对硬件都有一定的要求,比如内存大小.早期内存普遍2G.4G,现在都是8G以上.那么win10 8g内存够不够用呢?其实内存够 ...

  5. 计算机内存1tb,手机领先电脑 内存1TB够不够用?

    原标题:手机领先电脑 内存1TB够不够用? 1TB的手机不止是锤子还有个更硬的手机品牌 说出来你们可能不信我用过内存只有1GB的安卓智能手机,那时候好像还是安卓2.3,但是好在很多东西都可以存在内存卡 ...

  6. android手机8g内存够用嘛,安卓旗舰机8GB运行内存到底够不够用?有必要上12GB吗?...

    手机运行是否流畅,主要看三大方面,第一是处理器性能.第二是系统优化.第三就是运行内存了.或许运行内存对于苹果手机来说,影响不是特别大,毕竟三年前的iphone8,只有2GB运行内存,但放在今年运行还是 ...

  7. python编程8g的内存够么_详解解决Python memory error的问题(四种解决方案)

    昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条....下面说一下几个 ...

  8. 我的内存怎么不够用了?

    这是我2021年的第15篇原创文章,原汁原味的技术之路尽在Jerrycodes 为什么内存不够用? 交换(Swap)技术 虚拟内存 页(Page)和页表 MMU 页表条目 大页面问题 内存是稀缺的,随 ...

  9. 阿里云1M带宽够不够用?可以支持多少访问量

    阿里云服务器默认1M带宽够不够用呢? 1M带宽表示服务器上行带宽大小,也就是数据从服务器下载到用户客户端的速度,换算成实际下载速度是128kb/s.同一时间访问人数过多,就会出现卡顿打不开网页的情况. ...

最新文章

  1. 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
  2. TP自动生成模块目录
  3. 安卓指令和命令学习总结
  4. Linux驱动调试中的Debugfs的使用简介 CONFIG_DEBUG_FS 的功能与配置
  5. 机器学习算法与Python实践之(二)k近邻(KNN)
  6. JAVA基础学习笔记(2)
  7. arm linux 中断优先级,ARM中断处理过程
  8. Google的电话面试
  9. web网页版流程图插件-myflow.js-案例demo下载
  10. VMware 修复 Workstation、Fusion 中多个严重的代码执行漏洞
  11. JAVA进行文档转换_基于JAVA实现由Word文档向LaTeX文档转换的方法及系统与流程
  12. js的MDS代码multidimensional-scaling
  13. java jbutton 禁用_java – 在后台作业时禁用JButton,以避免多次单击
  14. 【推荐】区块链技术及行业应用资料合集
  15. P3369 (Splay树模板)
  16. 初步搭建 prometheus+ Grafana服务器性能监控平台
  17. HTML ASP VBSCRIPT JAVASCRIPT SKILLS 常见问题
  18. 【简短测评】在线音乐播放器,哪一款适合写代码时候使用
  19. Eclipse各版本代号一览表以及官网上有很多版本的eclipse,下载哪个版本比较合适呢?
  20. 用unity制作2d钟表

热门文章

  1. JavaWeb(part1)--servlet
  2. 期货与期权(part3)--期货合约和期权合约
  3. numpy基础(part9)--矩阵
  4. SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
  5. 关于 SAP 电商云 Spartacus UI 修改 div 层级结果是否算是 breaking change 的问题
  6. TypeScript Type Compatibility 类型兼容性
  7. 如何将SAP Spartacus的默认home页面替换成login页面 - ProtectedRoutesService
  8. SAP Spartacus能够使用的theme
  9. Angular应用bootstrap时的version检测机制
  10. SAP Spartacus Storefront页面的page layout config