Функция malloc
должна использоваться только в том случае, если вам нужно, чтобы структура дожила до времени жизни текущей функции. Функция malloc
выделяет память из кучи, что позволяет ей долго жить. Это полезно, если вам нужно хранить элементы после выхода из функции (например, в общем списке).
Также вводятся дополнительные накладные расходы, включая ...
- Принудительная проверка ошибок в вашем коде
- Разделение выделения и инициализация структуры
- Затраты в процессе отслеживания памяти
С другой стороны, второй синтаксис выделяет память в стеке. Это полезно, потому что память здесь автоматическая в том смысле, что вам не нужно об этом думать. Память освобождается, так сказать, при выходе из функции. Кроме того, он допускает один оператор для выделения и инициализации.
Единственное исключение из этого правила - для структур, которые достаточно велики, чтобы потенциально вызвать переполнение стека. Стек является ограниченным ресурсом, и большие структуры могут привести к его расширению. Куча, вообще говоря, имеет больше места и может легко вместить эти большие структуры.