32位数组的最大大小?

Mat*_* M. 10 rust

根据Rust参考:

isize类型是带符号的整数类型,其位数与平台的指针类型相同.对象和数组大小的理论上限是最大值isize.这确保了isize可以用于计算指向对象或数组的指针之间的差异,并且可以解决对象内的每个字节以及超过结尾的一个字节.

这显然将数组限制在32位系统上的最多2G元素,但是不清楚的是数组是否也被限制为最多2GB的内存.

在C或C++中,您可以将指针转换为第一个和最后一个最后一个元素,char*并从这两个元素中获取指针的差异; 有效地将阵列限制为2GB(以免它溢出intptr_t).

在Rust中,32位数组是否也限制为2GB?或不?

Vee*_*rac 5

内部Vec确实将值限制为4GB,包括with_capacitygrow_capacity,使用

let size = capacity.checked_mul(mem::size_of::<T>())
                   .expect("capacity overflow");
Run Code Online (Sandbox Code Playgroud)

如果指针溢出会发生混乱.

因此,Vec分配的切片也以这种方式封装在Rust中.鉴于这是因为分配API的基本限制,如果任何典型类型可以绕过这一点,我会感到惊讶.如果他们这样做,Index由于指针溢出,在切片上将是不安全的.所以我希望不是.

但是,由于其他原因,可能仍然无法分配所有4GB.特别是,allocate不会让你分配超过2GB(isize::MAX字节),因此Vec仅限于此.