3、Rust类型系统深入解析

Rust类型系统深入解析

1. 类型在内存中的表示

在Rust中,每个值都有其对应的类型。类型的一个重要作用是告诉我们如何解释内存中的二进制位。例如,二进制序列 0b10111101 (十六进制表示为 0xBD ),在不同类型下有不同的含义:在 u8 类型下,它表示数字189;在 i8 类型下,它表示 -67。当我们定义自己的类型时,编译器会决定该类型在内存中的布局,包括结构体每个字段的位置以及枚举的判别式存储位置。这些细节对代码的正确性和性能都有影响。

1.1 对齐

在确定类型的内存表示之前,需要了解对齐的概念。对齐规定了类型的字节可以存储的位置。虽然理论上可以将任意内存位置的字节解释为某个类型,但实际上硬件会限制类型的放置位置。例如,指针指向字节而非位,如果一个类型的值从计算机内存的第4位开始,就无法引用其位置,因为指针只能指向字节边界。所以,所有值都必须至少按字节对齐,即放置在地址是8位倍数的位置。

有些值的对齐规则更为严格。在CPU和内存系统中,内存通常以大于单个字节的块进行访问。例如,在64位CPU上,大多数值以8字节(64位)的块进行访问,每个操作从8字节对齐的地址开始,这就是CPU的字长。CPU会采用一些技巧来处理读取和写入较小的值或跨越这些块边界的值。

如果尝试读取一个从8字节块中间开始的 i64 (即指向它的指针不是8字节对齐的),硬件需要进行两次读取,然后将结果拼接起来,这效率较低。而且,如果读取的内存同时被另一个线程写入,可能会得到奇怪的结果,导致值损坏。这种对未对齐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值