当前位置:首页 > 数码 > 内存规划-把握-片面指南-Rust (内存xa)

内存规划-把握-片面指南-Rust (内存xa)

admin7个月前 (05-04)数码30

整型,浮点型,struct,vec!,enum

本文是对内存规划的学习与记载

structA{a:i64,b:u64,}structB{a:i32,b:u64,}structC{a:i64,b:u64,c:i32,}structD{a:i32,b:u64,c:i32,d:u64,}fnmn(){println!("i32类型占的内存空间为:{}字节",std::mem::size_of::<i32>());println!("i64类型占的内存空间为:{}字节",std::mem::size_of::<i64>());println!("[i64;4]占的内存空间为:{}字节",std::mem::size_of::<[i64;4]>());println!("结构体A占的内存空间为:{}字节",std::mem::size_of::<A>());println!("结构体B占的内存空间为:{}字节",std::mem::size_of::<B>());println!("结构体C占的内存空间为:{}字节",std::mem::size_of::<C>());println!("结构体D占的内存空间为:{}字节",std::mem::size_of::<D>());}

输入

i32类型占的内存空间为:4字节i64类型占的内存空间为:8字节[i64;4]占的内存空间为:32字节结构体A占的内存空间为:16字节结构体B占的内存空间为:16字节结构体C占的内存空间为:24字节结构体D占的内存空间为:24字节

没啥好说的,和Go一样,struct会存在内存对齐/内存填充(8字节对齐)

D是由于编译器会优化内存规划,字段顺序重排

Rust中的Vec!和Go中的slice差不多,都是占24Byte,三个字段

structSimpleVec<T>{len:usize,//8capacity:usize,//8data:*mutT,//8}fnmain(){println!("Vec!类型占的内存空间为:{}字节",std::mem::size_of::<SimpleVec<i32>>());println!("Option<i64>类型占的内存空间为:{}字节",std::mem::size_of::<Option<i64>>());}
Vec!类型占的内存空间为:24字节Option<i64>类型占的内存空间为:16字节

然而关于enum类型,

会有一个tag字段,uint64,来标志变体,是None值还是Some值

structOption{uint64tag;//占8字节SomeNonei64;//实践寄存的数据}
structSimpleVec<T>{len:usize,//8capacity:usize,//8data:*mutT,//8}enumData{//tag,uint64,8字节I32(i32),//4字节,但需内存对齐到8字节?F64(f64),//8字节Bytes(SimpleVec<u8>),//24字节}fnmain(){println!("Data这个Enum类型占的内存空间为:{}字节",std::mem::size_of::<Data>());}

输入为:

Data这个Enum类型占的内存空间为:32字节

Rust的enum相似C++std::variant的成功(大抵是用union成功的)

union的内存大小是其成员中最大的那个成员的大小,

相似的,关于Data这个Enum类型,会选用最大的那个成员的大小

把握

所以24+tag的8字节,最终为32字节(tag在这里就用来标识其为i32,还是f64,或许是Vec)

嵌套的枚举:

structSimpleVec<T>{len:usize,//8capacity:usize,//8data:*mutT,//8}enumData{//tag,uint64,8字节I32(i32),//4字节,但需内存对齐到8字节?F64(f64),//8字节Bytes(SimpleVec<u8>),//24字节}typeOptData=Option<Data>;fnmain(){println!("OptData这个Option类型占的内存空间为:{}字节",std::mem::size_of::<OptData>());}

输入:

OptData这个Option类型占的内存空间为:32字节

由于编译器会对嵌套的枚举类型启动优化,会将其tag开展,把多个tag合在一同了,相似上方:

开展变成一个枚举(None是uint64,能标识十分多信息)

typeOptData=Option<Data>;enumOption{Some,None,}enumOptData_{I32(i32);F64(f64);Bytes(SimpleVec<u8>),None}

元组tuple

rust中的元组大小固定吗?

在Rust中,元组的大小是固定的。这里解释一下元组大小固定的含意:

举个例子:

lettuple=(1,2.0,"three");

这里元组蕴含一个i32,一个f64和一个字符串。编译器会预先知道:

这20字节的内存在编译时就已调配,运转期不会扭转。

假设后续试图给这个元组增加或缩小元素,编译都会报错。

所以说,元组的大小和内容是固定的,这是Rust成功方式的一局部。

更多可参考Rust数据内存规划

参考资料

[1]

Rust内存规划:

[2]

Rust数据内存规划:


玩rust买内存好还是固态硬盘好

要回答这个问题,需要根据你的当前的具体配置来决定。 单纯讲硬件对游戏的影响,内存的重要性肯定要比硬盘高。 如果你的内存较小,那么首先应该扩充内存,对游戏的流畅运行肯定会有更积极的帮助。 如果你的内存已经够大,完全可以满足游戏需要,那么再添加内存是没有意义的,此时更换固态硬盘,游戏的载入速度会有显著提高,会有更优良的游戏体验。

win7能不能玩rust详细介绍

rust2K配置要求是内存8GB以上CPU,IntelCore230GHz或AMD同性能CPU硬盘2GB以上空间,显卡nVidiaGeForce9800GT或ATI同性能显卡,系统WinXP或VISTA或Win7或Win8,声卡DirectSound兼容声卡rust2K配置的特点 随着DLSS20技术的。 rust腐蚀游戏最低配置要求处理器2GHz的内存4GDirectX90推荐配置处理器3GHz的内存8GDirectX110硬盘2G以上是rust的要求配置处理器最低要求主频20G以上,你的是双核22主频,建议把内存升级到4G,或者改。 配置 处理器3 GHz的 内存8 G DirectX110 硬盘2 G 以上是rust的要求配置 处理器最低要求主频20G以上,你的是双核22主频,建议把内存升级到4G,或者改成 XP系统 ,因为Win7占用你的系统资源太大了。 可以,我的就是win7的,可以玩。 如果不知道自己电脑配置的可以下载鲁大师,在里面检测一下自己的电脑配置Rust是采用Unity 3D制作的第一人称僵尸生存网络游戏,游戏是采取PVP,玩家看见其他玩家可以选择结伴无视或是直接杀了对方,抢夺其身上的任何资源。 这配置很弱,很老的配置了 肯定不能玩,会非常的卡 楼主还是换个更好点的配置在玩吧 cpu,内存和显卡适量的都要换稍微好点的 而且还要用加速器去玩 因为延迟也会很高,会非常卡 像我是用玲珑国际网游加速器去玩的 才。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Rust

“内存规划-把握-片面指南-Rust (内存xa)” 的相关文章

深化解析Clap命令行解析库-Rust脚手架 (深入解析)

深化解析Clap命令行解析库-Rust脚手架 (深入解析)

有感而发 最近,在和前端小同伴聊天发现,在2024年,她们都有计划入局学习的行列。毕竟前端如今太卷了,框架算是走到「走投无路」了,无非就是在原有基础上修修补补。一切他们想在新的赛道弯道超车。...

深化摸索Rust中经常使用Serde的片面指南 (深化探讨)

深化摸索Rust中经常使用Serde的片面指南 (深化探讨)

在处置HTTP恳求时,咱们总是须要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格局(例如JSON)之间来回转换。 Serde是一个库(crate),用于高...

在前端名目中经常使用Rust-编译为-WebAssembly (前端name)

在前端名目中经常使用Rust-编译为-WebAssembly (前端name)

前言 最近,不是放大了对关系文章的输入吗,在评论区或许私信区。有一些不同的声响说:Rust没有出路,而后...."。其实呢,看一个技术能否有须要学习的能源。想必大家的底层理由都是「一切都是向...

深化浅出把握JSON处置-如何在Rust中操作JSON (剖析深入浅出)

深化浅出把握JSON处置-如何在Rust中操作JSON (剖析深入浅出)

sonic-rs​还具备一些额外的方法来启动惰性评价和提高速度。例如,假设咱们想要一个JSON​字符串文字,咱们可以在反序列化时经常使用LazyValue​类型将其转换为一个依然带有斜杠的JSON字符...

记一次性Rust内存走漏排查之旅 (记一次性游戏)

记一次性Rust内存走漏排查之旅 (记一次性游戏)

在某次继续压测环节中,咱们发现GreptimeDB的Frontend节点内存即使在恳求量颠簸的阶段也在继续下跌,直至被OOMkill。咱们判别Frontend应该是有内存走漏了,于是开启了排查内存...

Rust-摸索两种言语在文件处置方面的绝对长处-Go-文件上行性能比拟-vs (rust摸领地柜还会被炮台打吗)

Rust-摸索两种言语在文件处置方面的绝对长处-Go-文件上行性能比拟-vs (rust摸领地柜还会被炮台打吗)

一、设置 一切测试都在装备16G内存的BookProM1上口头。 软件版本为: 测试工具是一个基于libcurl并经常使用规范线程的自定义工具,能够发送多局部恳求。 资产目...

环球-Futures-Rust-探求-异步编程 (环球扶梯乘完需要约几分钟)

环球-Futures-Rust-探求-异步编程 (环球扶梯乘完需要约几分钟)

当天,咱们来讨论中的异步编程和Futures。Rust的异步编程是一个弱小的个性,它准许开发者编写非阻塞的、高性能的运行程序。让咱们一同深化了解这一律念及其在Rust中的运行。 Rust中...

从零开局构建您的第一个运行-深化Rust编程 (从零开始开局)

从零开局构建您的第一个运行-深化Rust编程 (从零开始开局)

当天,咱们将一同入手通常,经过构建一个便捷的运行来深化了解这门言语。 咱们的名目是一个命令行文本文件剖析器,它不只能读取和显示文件内容,还会提供一些基础的文本剖析,如计算单词数量和行数。...