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

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

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

2 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам