当前位置: 首页>编程语言>正文

rustdesk docker运行时时间差8小时 rust运行内存多少

C++的情况

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

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

Rust是怎么做的

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

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

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

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

Rust的局限性

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

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


https://www.xamrdz.com/lan/5qu1931494.html

相关文章: