Вопрос из разряда "Почему в байте 8 бит?".
Объявление переменной как раз является запросом на выделение памяти. Если вам необходимо выделить меньше памяти - можно использовать тип с меньшим размером - байт, бит. А примером динамически растущих структур памяти может быть какой-нибудь вектор из C++. В чем недостаток - накладные расходы. В случае недоступности непрерывного участка памяти при расширении классического массива, нужно будет скопировать всю структуру в другую область памяти. Гораздо быстрее и экономичнее с точки зрения скорости работы выделить сразу больший шмат памяти, благо её нынче не дефицит на ПК.