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

时间:2018-11-24 22:04:23

标签: python numpy memory-management byte

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

export default class ParentComponent extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      scrollPosition: 0
   };

   this.updateScroll = debounce(this.updateScroll, 20);
 }
 ...
}

这就像8000 GB的内存。最初,我认为nbytes不是消耗的内存的实际字节,但它清楚地here写道nbytes给出了总字节数。

这怎么可能? numpy是否使用类似延迟加载的内容?我确定这是有问题的,因为在拥有8 GB RAM的机器上根本不可能有8000 GB的内存。

PS:在Google Colab中,这会泄漏内存

1 个答案:

答案 0 :(得分:1)

这可能与系统级别有关。我不知道Google的系统到底如何,但是即使在具有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一次使用全部 内存,您会感到惊讶(很多th动)。