Even if you store a vector on the stack, it only occupies a constant 12 bytes (*) sizeof(vector), which stores the maintenance data. You can assume it keeps track of size of an element, allocated count, used count, and pointer to the first one.
But the actual memory block is always allocated on the heap, because it is the only way for it to be freed when you need the vector to grow. If you think about it, space on the stack can never be allocated / freed.
(*) edited, I misread a stackoverflow page