相关疑难解决方法(0)

当默认值为 0 时,为什么 vec![0, <super large number>] 如此节省内存?

我正在处理 Rust 中的大量数据,在评估数据结构的内存使用情况时,我偶然发现了一些令人惊讶的结果。

首先,我尝试通过将零推入其中来手动填充向量:

let mut arr = vec![];

for _ in 0..(4_294_967_294 as u32) {
    arr.push(0);
}
Run Code Online (Sandbox Code Playgroud)

一段时间后,不出所料,我会说,我的计算机耗尽了可用内存,并且该进程被操作系统终止了。

但是,如果我使用宏初始化来初始化向量,行为会发生变化:

let mut arr = vec![0; 2_147_483_647_000];

for i in 1..1_000_000_000 {
    arr[i-1] = rng.next_u64();

    let sample = rng.next_u32();
    let res = arr[sample as usize];
    if i % 10000000 == 0 {
        print!("After {} ", i);
        print!("Btw, arr[{}] == {} ", sample, res);
        print_allocated_memory();
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管我用实际的 u64 值填充了 10 亿个条目,并从数组中读出了随机值(大部分是零,我只是试图在此处排除整个数组的编译器优化),但我的计算机内存并没有溢出。

内存使用情况jemalloc如下(请注意,我的计算机仅安装了 16 GB RAM):

allocated 16777216.05 MiB resident …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
906
查看次数

当我在C++中打印未初始化的变量时会发生什么?

为什么打印32767(或其他随机数)?什么是std::cout印刷品?为什么不NULL(或0)?

int main() 
{
    int a;
    std::cout << a;
}
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
2
解决办法
878
查看次数

标签 统计

c++ ×1

rust ×1