Разница между динамическим распределением статического выделения

Мой вопрос
В каком языке программирования динамическое выделение памяти быстрее, чем статическое?

int main(int, char**)
{
int *pa = new int; // faster than
int a;             // ?
return 0;
}

-1

Решение

динамическое распределение памяти быстрее статического

То, что вы сравниваете — это распределение в стеке (автоматическое) и распределение в куче (динамическое), статическое распределение здесь не задействовано.

Распределение по стеку происходит быстро в C ++, как только функция введена, пространство для автоматических переменных было выделено. Это всего лишь вопрос вычитания размера необходимого пространства из указателя стека.

Распределение кучи обычно медленнее, чем выделение в стеке. Он включает в себя выделение фрагментов памяти из ОС, а затем разбиение этих фрагментов на более мелкие фрагменты для обслуживания пользовательских запросов на выделение ресурсов. Менеджеры кучи могут быть довольно сложными библиотеками, смотрите управление памятью.

4

Другие решения

Это не статическое распределение, а автоматическое распределение (ваши переменные являются локальными). Статическое распределение для static локальные и глобальные (file-scope) переменные.

Тем не менее, динамическое распределение никогда Быстрее. В C и C ++ это системный вызов, который медленный.

Даже если это не так медленно, автоматическое и статическое распределение мгновенный. Статическое распределение происходит при запуске программы, и ОС просто выделяет больше места для вашего процесса. Автоматическое распределение — это просто указатель стека, идущий дальше на несколько байтов при вызове вашей функции. В любом случае ничего более (с точки зрения процессора) не делается, чем если бы вы не распределили свою переменную.

2

По вопросам рекламы [email protected]