我想预留一 block 内存(1GB)来载入数据进行分析。每条记录大约10K字节,至少有100k条记录。最初我打算在 C++ 代码中使用 malloc,但有人建议我不要这样做。
现在,使用 char * block = new char[1000000000] 是否需要额外的内存来存储指向数组中 1,000,000,000 个元素中每一个元素的指针?与 new[] 相比,使用 char * block = malloc(1000000000 * sizeof(char)) 需要更少的额外内存吗?
我的目标是使用尽可能少的内存,并且不希望大量记录进出内存。
谢谢:)
最佳答案
在我的 Linux 机器上:
小程序
//malloc.cc
#include <cstdlib>
int main() { char* block = (char*) malloc(1000000000); }
运行时:
$ make malloc
$ valgrind ./malloc 2>&1|grep total
==23855== total heap usage: 1 allocs, 0 frees, 1,000,000,000 bytes allocated
新
//new.cc
int main() { char* block = new char[1000000000]; }
运行时:
$ make new
$ valgrind ./new 2>&1|grep total
==24460== total heap usage: 2 allocs, 0 frees, 1,000,072,704 bytes allocated
对于不同的值,72,704B 的开销保持不变。
关于c++ - malloc() 与 new[] 的内存开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550099/