Динамический массив в простейшей реализации представляет собой выделенный операционной системой непрерывный кусок памяти, указатель на его начало и два дополнительных счётчика:
- ёмкость выделенной памяти (capacity)
- количество элементов в массиве (оsize)
При попытке добавить элемент в конец массива проверяется условие size < capacity.
Если оно истинно, то элемент просто добавляется на позицию, соответствующую началу массива плюс смещение на size.
Если ложно, происходит реаллокация: операционная система выделяет новый большой кусок памяти и в него копируются данные из старого куска, который затем освобождается.