user245019
user245019

Reputation:

C++ Vector Memory

I'm working on a largish project, and we are having some memory issues now. Vectors have been used for all arrays, and a quick search there seems to be about 2000 member vectors.

Going through the code it seems nobody has ever used a reserve or a swap (were not on C++11 yet for this project).

Are there any tools or techniques I can do to find out how much memory is being lost in these vectors?

Upvotes: 0

Views: 167

Answers (3)

Graham Griffiths
Graham Griffiths

Reputation: 2216

Just add some periodic logging lines that print the vector size, capacity and

sizeof(v) + sizeof(element_type) * v.capacity();  

for each of your vectors v (this last will be the exact size of the vector in memory). You could register all your vectors somewhere central to keep this tidy.

Then you can do some analysis by searching through your logfiles - to see which ones are using significant amounts of memory and how the usage varies over time. If it is only peak usage that is high, then you may be able to 'resize' your vectors to get rid of the spare capacity.

Upvotes: 0

Ilya Kobelevskiy
Ilya Kobelevskiy

Reputation: 5345

One fast but dirty trick to see the effect of capacity on memory would be to modify std::vector (or typedef std::vector to your custom vector type).

Idea is to modify vector to ensure that this custom new vector increases capacity exactly by what is needed instead of doubling it (yes, it will be super slow), and see how memory usage of the application changes when you run it with this custom vector.

While not useful in actually optimizing the code, it at least quickly gives you an idea of how much you can gain by optimizing vectors.

Upvotes: 1

priyanka
priyanka

Reputation: 244

use valgrind for debugging memory issues. http://valgrind.org/docs/manual/ms-manual.html

Upvotes: 2

Related Questions