05 所有权

05 所有权

------正文内容展示,开始汲取新知识啦------

栈与堆

栈和堆都是代码在运行时可以使用的内存空间,不过它们通常以不同的结构组织而成。栈会以我们放入值时的顺序来存储它们,并以相反的顺序将值取出。也就是所谓的“后进先出”

所有存储在栈中的数据都必须拥有一个已知且固定的大小对于那些在编译期无法确定大小的数据,只能将它们存储在堆中。堆空间的管理是较为松散的:当将数据放入堆中时,就可以请求特定大小的空间。操作系统会根据请求在堆中找到一块足够大的可用空间,将它标记为已使用,并把指向这片空间地址的指针返回给我们。这一过程就是所谓的堆分配,也常常简称为分配将值压入栈中不叫分配。由于指针的大小是固定的,且可以在编译期确定,所以可以将指针存储在战中,当你想要访问指针所指向的具体数据时,可以通过指针指向地址来访问

向栈上推入数据要比在堆上进行分配更有效率一些,因为操作系统省去了搜索新数据的存储位置的工作;这个位置永远处于栈的顶端。除此之外,操作系统在堆上分配空间时,还必须首先找到足够放下对应数据的空间,并进行某些记录工作来协调随后进行的其余分配操作。

由于多了指针跳转的环节,所以访问堆上的数据时要慢于访问栈上的数据。一般来说,现在处理器在进行计算的过程中,由于缓存的缘故,指令在内存中跳转的次数越多,性能就越差因此处理器在操作排布紧密的数据时要比操作排布稀疏的数据有效率的多。另外,分配命令本身也可能消耗不少时钟周期。许多系统编程语言都需要记录代码中的分配的堆空间最小化堆上的冗余数据并及时清理堆上无用数据,以避免耗尽空间。

所有权规则

所有权的规则如下:

  • Rust 中的每一个值都有一个对应的变量作为它的所有者。
  • 在同一个时间内,值有且仅有一个所有者。
  • 当所有者离开自己的作用域时,它持有的值就会被释放
温馨提示:本文最后更新于2024-05-04 10:58:29,某些文章具有时效性,若有错误或已失效,请在下方留言或QQ联系站长
------正文内容展示,开始汲取新知识啦------

感谢您的访问,Ctrl+D收藏本站吧。

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容