cは私がメインでのstd ::地図(STD :: Bad_alloc)++
class memModel
{
struct Addrlist
{
vector<string> data;
vector<int> timestamp;
vector<string> client;
}
map<int, Addrlist> AddrMap ; //store based address and list of all accesses
}
私のプログラムでは、次のしている()私はいくつかのファイルから読み取られ、数百万を保存しますこのstuct
int main()
{
memModel newObj ;
ifstream file1("dataStream");
ifstream file2("timeStampSteam");
ifstream file3("clientStream");
ifstream file4("addrStream") ;
string dataSTR,clientSTR;
int time = 0 ;
int addr;
for(int i=0; i<10000000/*10mil*/ ; i++)
{
getline(file1,dataSTR);
getline(file3,clientSTR);
file2 >> time ;
file4 >> hex >> addr ;
newObj.AddrMap[addr].data.push_back(dataSTR) ;
newObj.AddrMap[addr].time.push_back(time) ;
newObj.AddrMap[addr].client.push_back(clientSTR) ;
}
}
へのエントリーは、だから、問題は、私はメモリ不足とstd :: Bad_allocの例外を取得しています。このコードは、より小さなデータサイズで動作します。
私は構造体とマップが格納されている場所を理解しようとしています。すべてがスタックになっていますか? ベクトルは動的に右に割り当てられます。それらはヒープに行くのですか?
大きなデータセットを扱うのはこれが初めてのことです。そのため、概念をよりよく理解したいと思います。どのように私はヒープを使用していると私はメモリが不足していないことを確認するためにこれを変更することができます。
推奨読者:http://stackoverflow.com/a/37352109/560648 –
「addr」の繰り返しがまれである場合、データモデルは愚かです。 –
平均して、それぞれのユニークなアドレスの100〜150回の繰り返しを見ています。 – akslah