我是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中,这会泄漏内存
答案 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动)。