Mar*_*ark 5 memory allocation visual-c++
我一直在努力弄清楚为什么我的程序消耗了如此多的系统RAM.我正在从磁盘加载一个文件到几个动态分配的数组的结构向量.根据任务经理的说法,一个16MB的文件最终消耗280MB的系统RAM.文件中的类型主要是带有一些短裤和一些长片的字符.该文件中有331,000条记录,平均包含5个字段.我将向量转换为结构,并将内存减少到大约255MB,但仍然看起来非常高.由于向量占用了大量内存,程序内存不足,因此我需要找到一种方法来使内存使用更加合理.
我写了一个简单的程序来填充带有1,000,000个char指针的向量(或数组).我希望它为每个分配4 + 1个字节,为存储提供5MB内存,但实际上它使用64MB(阵列版本)或67MB(矢量版本).当程序首次启动时它只消耗400K,那么为什么阵列需要额外的59MB或者分配的矢量为62MB?这个额外的内存似乎是针对每个容器的,所以如果我创建一个size_check2并复制所有内容并运行它,程序会使用135MB来获取10MB的指针和数据.
提前致谢,
size_check.h
#pragma once
#include <vector>
class size_check
{
public:
size_check(void);
~size_check(void);
typedef unsigned long size_type;
void stuff_me( unsigned int howMany );
private:
size_type** package;
// std::vector<size_type*> package;
size_type* me;
};
Run Code Online (Sandbox Code Playgroud)
size_check.cpp
#include "size_check.h"
size_check::size_check(void)
{
}
size_check::~size_check(void)
{
}
void size_check::stuff_me( unsigned int howMany )
{
package = new size_type*[howMany];
for( unsigned int i = 0; i < howMany; ++i )
{
size_type *me = new size_type;
*me = 33;
package[i] = me;
// package.push_back( me );
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp #include"size_check.h"
int main( int argc, char * argv[ ] )
{
const unsigned int buckets = 20;
const unsigned int size = 50000;
size_check* me[buckets];
for( unsigned int i = 0; i < buckets; ++i )
{
me[i] = new size_check();
me[i]->stuff_me( size );
}
printf( "done.\n" );
}
Run Code Online (Sandbox Code Playgroud)