Мой вопрос
В каком языке программирования динамическое выделение памяти быстрее, чем статическое?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
динамическое распределение памяти быстрее статического
То, что вы сравниваете — это распределение в стеке (автоматическое) и распределение в куче (динамическое), статическое распределение здесь не задействовано.
Распределение по стеку происходит быстро в C ++, как только функция введена, пространство для автоматических переменных было выделено. Это всего лишь вопрос вычитания размера необходимого пространства из указателя стека.
Распределение кучи обычно медленнее, чем выделение в стеке. Он включает в себя выделение фрагментов памяти из ОС, а затем разбиение этих фрагментов на более мелкие фрагменты для обслуживания пользовательских запросов на выделение ресурсов. Менеджеры кучи могут быть довольно сложными библиотеками, смотрите управление памятью.
Это не статическое распределение, а автоматическое распределение (ваши переменные являются локальными). Статическое распределение для static
локальные и глобальные (file-scope) переменные.
Тем не менее, динамическое распределение никогда Быстрее. В C и C ++ это системный вызов, который медленный.
Даже если это не так медленно, автоматическое и статическое распределение мгновенный. Статическое распределение происходит при запуске программы, и ОС просто выделяет больше места для вашего процесса. Автоматическое распределение — это просто указатель стека, идущий дальше на несколько байтов при вызове вашей функции. В любом случае ничего более (с точки зрения процессора) не делается, чем если бы вы не распределили свою переменную.