gpt4 book ai didi

python - numpy 数组能够为大型数组分配大量内存

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:08 24 4
gpt4 key购买 nike

我是 numpy 的新手。这对大多数人来说似乎有点愚蠢,但我找不到任何地方的答案

x = np.zeros(1000000000000)
x.nbytes
>> 8000000000000

这相当于 8000 GB 的内存。最初我认为 nbytes 不是实际消耗的内存字节,但它写得很清楚 here nbytes 给出了总字节数。

这怎么可能? numpy 是否使用延迟加载之类的东西?我敢肯定这里有问题,因为在我有 8 GB RAM 的机器上根本不可能有 8000 GB 内存。

PS:在 google colab 中这会泄漏内存

最佳答案

这可能与系统级别有关。我不知道谷歌的系统究竟是怎样的,但即使在具有 8GB 内存的标准 linux 机器上,这也是可能的,因为正如你所说的页面延迟加载。

numpy 可能会在我的机器上使用 stdlib malloc,对于大型分配使用系统 mmap。系统必须将分配给进程的页面归零,否则会存在安全风险,这意味着默认情况下新映射的页面将归零。由于您没有使用过任何页面,系统不会为您分配任何页面。

#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>

int main() {
void *ptr = mmap(0, 8000000000000, PROT_READ | PROT_WRITE, MAP_SHARED, 0, 0);
if (ptr == NULL) {
printf("Allocating bytes failed\n");
}
else {
printf("Success!\n");
}
}

我的预感是,如果您尝试同时使用所有 内存,您将会感到惊讶(大量的颠簸):D。

关于python - numpy 数组能够为大型数组分配大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com