Skip to main content

Command Palette

Search for a command to run...

Republic Day Insights: Effective Vector Memory Management

Updated
2 min read
Republic Day Insights: Effective Vector Memory Management
S
Documenting my daily learnings as I prepare for SDE-1 roles at high-performance and HFT-focused companies. Passionate about systems, strong DSA, and building efficient backend infrastructure.

vector memory management

#include <iostream>
#include <vector>
int main(){
    std::vector<int> v;
    std::cout<<"Initial Capacity: "<< v.capacity() <<"\n";

    for (int i = 0; i < 10; ++i){
        v.push_back(i);

        std::cout<<" Size: " << v.size()
                 <<" | Capacity: "<< v.capacity()
                 <<" | Address of v[0]: " << &v[0] << "\n";
    }
    return 0;
}

This code scales, but it has a problem known as the doubling strategy!

  • but, it’s not a problem, basically we all know vector is a dynamic array

  • but what makes it dynamic is the doubling strategy

  • the vector starts with 0 initial capacity, then we add 1, so it increase it’s capacity by 1

  • basically the whole vector moves to new position of size: 1 , now we add another element: 2,

  • it resizes itself to 1×2 = 2 , not resize but move to a new space with size:2

  • now another element:3 (here) , it resizes 2×2=4, and so on,

  • the vector sizes become 0,1,2,4,8,16…

  • this is a problem for high frequency trading firm

  • THE SOLUTION(WRONG ONE: My thought) → we use v(10) at the starting of the vector while initializing

vector<int> v(10);
  • what’s wrong? it actually makes an array with 10 zeroes initialized

  • and the element to be added will go to 11th position where size of v: 10×2=20;

  • LOL

  • correct approach? use reverse()

vector<int> v;
v.reserve(10);
  • it tells the compiler, we are expecting 10 values here, until then don’t resize!!!!!

Bye and Jai Shree Ram!

More from this blog

Saksham's Blog on Learning

11 posts

I write about what I learn to become a high-paying quant dev!