rust8G内存够不够用_Rust是如何做到内存安全的
C++的情况
C++把内存使用分为两种情况:值对象和指针对象。值语义的对象超出作用域会自动调用析构函数销毁,传递或者赋值的时候会进行一次拷贝。指针语义则交给人肉来管理,或者使用智能指针来引用计数。
值对象在传递赋值中拷贝一次比较浪费,所以C++后来有了移动构造函数。值在移动以后,关联的数据移动到新值。
Rust是怎么做的
Rust则是在C++的基础上进一步优化。Rust的对象有一个所有者,和多个引用。
Rust只允许值有一个所有者,传递和赋值会导致所有权移动。这看起来像C++的unique_ptr,但实际上更像C++的移动语义。也就是说C++拷贝是隐式的移动是显式的,Rust移动是隐式的。当然Rust在这里有编译器的静态分析,没有运行时开销。
很多地方并不想移动值,只是借用一下,Rust引入了引用的概念,来表达指针语义。一个常见内存问题是指针指向了一个无效的内存地址,Rust却没这个问题。Rust编译器强制让你证明值的生命周期大于它的引用的生命周期。有些编译器搞不清楚的地方需要添加生命周期标记,来告诉编译器。
获取引用是把一个值取地址的过程,是很严肃的。Rust核心的地方就是在这里做了限制,保证了内存安全。
Rust的局限性
即便有了复杂的所有权和生命期机制,但遇见复杂的情况还要回到引用计数。
既要零开销抽象,又要内存安全,那么付出的代价就是代码可读性变差。所以说天下没有免费的午餐、鱼与熊掌不可兼得。希望rust能增强生命周期自动推断,减少人工标注。
rust8G内存够不够用_Rust是如何做到内存安全的相关推荐
- 计算机专业买笔记本8g内存够吗,笔记本电脑8g内存够用吗_笔记本8G内存够不够用-win7之家...
很多用户在购买电脑的时候,都喜欢看一下内存容量,有不少笔记本电脑用户想要买8g内存,但是不知道8g内存够用吗?对于一般的用户来说,其实8G内存可以满足日常使用,用户可以正常浏览网页.玩一般网游和普通单 ...
- rust8G内存够不够用_小米10运行内存8GB和12GB有什么区别,买哪个更划算?
小米10采用了全新Kryo 585架构的骁龙865处理器以及6.67英寸的AMOLED双曲面屏幕.运行内存采用LPDDR5的高速内存,分为8GB和12GB两种选择.机身存储采用UFS3.0高速存储,有 ...
- rust8G内存够不够用_多线程?怎么用?
Java线程:概念与原理 操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可 ...
- 8g内存学习计算机专业够吗,电脑8g内存够用吗_win108g内存够吗-系统城
2018-02-23 15:41:57 浏览量:15524 我们知道操作系统对硬件都有一定的要求,比如内存大小.早期内存普遍2G.4G,现在都是8G以上.那么win10 8g内存够不够用呢?其实内存够 ...
- 计算机内存1tb,手机领先电脑 内存1TB够不够用?
原标题:手机领先电脑 内存1TB够不够用? 1TB的手机不止是锤子还有个更硬的手机品牌 说出来你们可能不信我用过内存只有1GB的安卓智能手机,那时候好像还是安卓2.3,但是好在很多东西都可以存在内存卡 ...
- android手机8g内存够用嘛,安卓旗舰机8GB运行内存到底够不够用?有必要上12GB吗?...
手机运行是否流畅,主要看三大方面,第一是处理器性能.第二是系统优化.第三就是运行内存了.或许运行内存对于苹果手机来说,影响不是特别大,毕竟三年前的iphone8,只有2GB运行内存,但放在今年运行还是 ...
- python编程8g的内存够么_详解解决Python memory error的问题(四种解决方案)
昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条....下面说一下几个 ...
- 我的内存怎么不够用了?
这是我2021年的第15篇原创文章,原汁原味的技术之路尽在Jerrycodes 为什么内存不够用? 交换(Swap)技术 虚拟内存 页(Page)和页表 MMU 页表条目 大页面问题 内存是稀缺的,随 ...
- 阿里云1M带宽够不够用?可以支持多少访问量
阿里云服务器默认1M带宽够不够用呢? 1M带宽表示服务器上行带宽大小,也就是数据从服务器下载到用户客户端的速度,换算成实际下载速度是128kb/s.同一时间访问人数过多,就会出现卡顿打不开网页的情况. ...
最新文章
- 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
- TP自动生成模块目录
- 安卓指令和命令学习总结
- Linux驱动调试中的Debugfs的使用简介 CONFIG_DEBUG_FS 的功能与配置
- 机器学习算法与Python实践之(二)k近邻(KNN)
- JAVA基础学习笔记(2)
- arm linux 中断优先级,ARM中断处理过程
- Google的电话面试
- web网页版流程图插件-myflow.js-案例demo下载
- VMware 修复 Workstation、Fusion 中多个严重的代码执行漏洞
- JAVA进行文档转换_基于JAVA实现由Word文档向LaTeX文档转换的方法及系统与流程
- js的MDS代码multidimensional-scaling
- java jbutton 禁用_java – 在后台作业时禁用JButton,以避免多次单击
- 【推荐】区块链技术及行业应用资料合集
- P3369 (Splay树模板)
- 初步搭建 prometheus+ Grafana服务器性能监控平台
- HTML ASP VBSCRIPT JAVASCRIPT SKILLS 常见问题
- 【简短测评】在线音乐播放器,哪一款适合写代码时候使用
- Eclipse各版本代号一览表以及官网上有很多版本的eclipse,下载哪个版本比较合适呢?
- 用unity制作2d钟表
热门文章
- JavaWeb(part1)--servlet
- 期货与期权(part3)--期货合约和期权合约
- numpy基础(part9)--矩阵
- SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
- 关于 SAP 电商云 Spartacus UI 修改 div 层级结果是否算是 breaking change 的问题
- TypeScript Type Compatibility 类型兼容性
- 如何将SAP Spartacus的默认home页面替换成login页面 - ProtectedRoutesService
- SAP Spartacus能够使用的theme
- Angular应用bootstrap时的version检测机制
- SAP Spartacus Storefront页面的page layout config