Rust在运行时如何存储类型?

问题描述 投票:0回答:1

u32占用4个字节的内存,String占用3个指针大小的整数(用于位置,大小和保留空间),以及堆栈上的一些数量。

对我来说,这意味着Rust在执行代码时不知道什么类型存储在特定位置,因为该知识将需要更多的内存。

但是同时,为了能够解释该位置的字节,是否不需要知道在0xfa3d2f10中存储了什么类型?例如,要知道接下来的字节构成堆上String的规范吗?

memory types rust
1个回答
2
投票

Rust如何在运行时存储类型?

通常不。

Rust不知道,当执行代码时,在特定位置存储什么类型

正确

不需要知道存储什么类型

否,内存中的字节应该正确,其余代码假定相同。结构中字段的偏移量已烘焙到生成的机器代码中。

Rust什么时候存储like类型信息?

执行动态分配时,使用fat指针。它由指向数据的指针和指向vtable的指针组成,该指针组成了所讨论的接口。 vtable可以视为类型的表示形式,但是它没有很多您可能会认为属于“类型”的信息(除非特征需要它)。动态分配在Rust中并不常见,因为大多数人在可能的情况下更喜欢静态分配,但是两种技术都有其好处。

还有TypeId之类的概念,它可以表示一个特定类型,但只能表示类型的子集。除了“这些类型是否相同”之外,它也没有提供太多功能。

这不是很脆吗?

是,可以,这是使Rust变得如此有趣的原因之一。

在像C或C ++这样的语言中,没有什么可以保护程序员避免犯一些愚蠢的错误,这些错误会弄乱内存中漂浮的那些字节。犯这些错误是由于内存安全而导致错误的原因。与其将您的密码解释为密码,不如将其解释为您的用户名并输出给攻击者(哎呀!)

Rust以强大的类型系统和工具(例如借用检查器)的形式提供了防范措施,但是仍然都是在编译时完成的。 不安全 Rust启用了这些危险的工具,但要折衷,现在程序员应该自己承担所有保证,就像他们再次编写C或C ++一样。

另请参见:

© www.soinside.com 2019 - 2024. All rights reserved.