c++ - malloc() 与 new[] 的内存开销

标签 c++ memory malloc

我想预留一 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/

相关文章:

c++ - 此 C++ 语句中 'operator' 的含义

c++ - MPI_ERR_BUFFER : invalid buffer pointer

Java 整数内存分配

mysql - 错误: MySQL client ran out of memory

c - 使用malloc()和realloc()的函数的奇怪行为导致段错误

c - 为什么动态分配(链表/树),c

c++ - 如何使用 WebM VP8 编码器 API 将一系列图像编码为 VP8? (C/C++)

c++ - 使用 std::mutex、std::condition_variable 和 std::unique_lock

Java作业不一致地给出OOM错误

C - (malloc、calloc 或静态)从函数返回的二维字符数组