I am sequentially processing several large vectors and trying to free memory but at some point getting memory allocation error. I fill one vector (vec1), use it, free memory of it, and starting fill second vector (vec2), where I am getting memory error. I can not understand why, if I use another vector, and “free memory” of previous vector.
<code>std::vector <float> vec1
std::vector <float> vec2
for (int k = 0; k < 100; k++) //---filling vec1 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec1.insert(vec1.end(), sub_vec.begin(), sub_vec.end());
}
}
}
//---doing something with vec1
std::vector <float>().swap(vec1); //---trying to free memory
for (int k = 0; k < 100; k++) //---filling vec2 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec2.insert(vec1.end(), sub_vec.begin(), sub_vec.end()); ///----at some point getting error here, not enough memory
}
}
}
</code>
<code>std::vector <float> vec1
std::vector <float> vec2
for (int k = 0; k < 100; k++) //---filling vec1 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec1.insert(vec1.end(), sub_vec.begin(), sub_vec.end());
}
}
}
//---doing something with vec1
std::vector <float>().swap(vec1); //---trying to free memory
for (int k = 0; k < 100; k++) //---filling vec2 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec2.insert(vec1.end(), sub_vec.begin(), sub_vec.end()); ///----at some point getting error here, not enough memory
}
}
}
</code>
std::vector <float> vec1
std::vector <float> vec2
for (int k = 0; k < 100; k++) //---filling vec1 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec1.insert(vec1.end(), sub_vec.begin(), sub_vec.end());
}
}
}
//---doing something with vec1
std::vector <float>().swap(vec1); //---trying to free memory
for (int k = 0; k < 100; k++) //---filling vec2 with 432M elements
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
std::vector <float> sub_vec(48, 0); //---filling with some float, lets say 0
vec2.insert(vec1.end(), sub_vec.begin(), sub_vec.end()); ///----at some point getting error here, not enough memory
}
}
}
Tried free vector by shrink_to_fit(). With smaller amounts of elements works fine.
6