v
определенно является оберткой по крайней мере указателя и (в зависимости от реализации) некоторого другого учета.Размер v
в стеке (или в массиве) будет ограничен только теми членами, которые объявлены непосредственно в классе std::vector
, и да, это означает, что размер v
и, следовательно, размер экземпляровS
, будет постоянным.
Количество использованных байтов от имени v
(и экземпляров S
) будет зависеть от того, сколько куча память выделяется v
в процессе ее построения и срока службы.
Какая память используется для непосредственных членов S (включая v
), определяется кодом, выполняющим объявление:
void my_func() {
S s1; // `s1` and its members `a` and `v` are all on the stack
// ...though `v` will allocate heap memory for its own use
S* s2 = new S; // `s2` points to a heap-allocated instance of `S`