小编Mar*_*ark的帖子

为什么存储5MB数据的VC++程序会消耗64MB的系统内存?

我一直在努力弄清楚为什么我的程序消耗了如此多的系统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( …
Run Code Online (Sandbox Code Playgroud)

memory allocation visual-c++

5
推荐指数
1
解决办法
197
查看次数

标签 统计

allocation ×1

memory ×1

visual-c++ ×1