【发布时间】:2015-10-11 13:25:13
【问题描述】:
我想保留一块内存 (1GB) 以将数据加载到其中进行分析。每条记录大约 10K 字节,至少有 100k 条记录。最初我打算在 c++ 代码中使用 malloc,但有人建议我不要这样做。
现在,使用 char * block = new char[1000000000] 是否需要额外的内存来存储指向数组中 1,000,000,000 个元素的指针?使用 char * block = malloc(1000000000 * sizeof(char)) 会比 new[] 需要更少的额外内存吗?
我的目标是尽可能少地使用内存,并且不希望将记录淹没在内存中。
谢谢:)
【问题讨论】:
-
您认为
new实际做了什么?您会惊讶地发现它结合了对 malloc 的调用以分配内存和对构造函数的调用以构建对象(如果最后一部分是相关的)? -
malloc和new几乎可以肯定使用相同的底层分配器。为什么建议您不要这样做? -
malloc()只是给你一大块内存。new()实际上会运行一堆代码给你一个对象,它会在内部做malloc()无论如何给你和你自己调用 malloc 一样的空间。 -
@Olaf:
char的构造函数是什么? -
有什么原因不能使用
std::vector和std::vector::reserve或std::vector::resize?