2014-08-29 5 views

ответ

2

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

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

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

+2

_Автоматическое распределение - это всего лишь указатель stac, идущий на несколько байт выше_ - обычно стек растет, от высоких адресов до нижних. –

+0

Я никогда не задумываюсь об этом, но концептуально стек всегда растет «вверх» (если вы не кладете вещи на свой потолок);) – Quentin

+0

Ну, указатель _stac, идущий на несколько байт выше_, довольно конкретный и неточный. В документации по документации Intel отображаются как нижние адреса внизу, так и верхние адреса вверху. –

4

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

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

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

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

Смежные вопросы