MST

星途 面试题库

面试题:Rust数组的底层存储机制之布局问题

在Rust中,数组的元素在内存中是如何布局的?为什么这种布局方式对性能有特定的影响?请举例说明。
18.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

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