面试题答案
一键面试- 数组元素内存布局
- 在Rust中,数组的元素在内存中是连续存储的。例如,定义一个
i32
类型的数组let arr: [i32; 3] = [1, 2, 3];
,这三个i32
类型的元素1
、2
、3
会在内存中依次排列,一个紧挨着一个。
- 在Rust中,数组的元素在内存中是连续存储的。例如,定义一个
- 对性能的影响
- 优点:
- 缓存友好:由于元素连续存储,当CPU从内存读取数据时,会将内存中的一块数据加载到缓存中。如果后续访问的数组元素在这块缓存数据范围内,就可以直接从缓存读取,而不需要再次访问较慢的内存。例如,对上述
arr
数组进行遍历for num in arr.iter() { println!("{}", num); }
,因为元素连续,很可能在一次缓存加载后,后续元素的访问都能命中缓存,大大提高了访问效率。 - 指针运算高效:在底层,连续的内存布局使得指针运算简单且高效。例如,要访问数组的第
n
个元素,可以通过数组起始地址加上n
乘以单个元素大小的偏移量直接计算得到,无需复杂的寻址逻辑。
- 缓存友好:由于元素连续存储,当CPU从内存读取数据时,会将内存中的一块数据加载到缓存中。如果后续访问的数组元素在这块缓存数据范围内,就可以直接从缓存读取,而不需要再次访问较慢的内存。例如,对上述
- 缺点:
- 插入和删除效率低:因为数组长度固定且元素连续,在数组中间插入或删除元素时,需要移动大量后续元素。比如在上述
arr
数组中间插入一个元素,就需要将插入位置之后的所有元素向后移动一个位置,这在元素数量较多时会消耗大量时间。
- 插入和删除效率低:因为数组长度固定且元素连续,在数组中间插入或删除元素时,需要移动大量后续元素。比如在上述
- 优点: