В первом случае a
сам занимает sizeof(int *)
байт автоматического хранилища, что указывает набайт динамического хранилища.
В последнем случае b
занимает 10 * sizeof(int)
байт автопилота. Поскольку b
- это массив, указателя нет.
Таким образом, первый случай использует более общие байты, но меньше в стеке (при условии, что стек используется для автоматического хранения).
Если общее количество используемых байтов относительно невелико, автоматическое хранение обычно является прекрасным. Для больших объемов предпочтение отдается динамическому хранению. Для реализации стека, в частности, слишком большое количество слишком больших автоматических переменных может переполнять стек.
Он может или не может выделять любую память в стеке для указателя '* a' в зависимости от того, как работает компилятор. Если вы используете '& a' где угодно, да, но в противном случае все ставки будут отключены. –
Спасибо. Я отвечу на мой ответ. – giusti
@DietrichEpp Повторное чтение, возможно, неправильно понял ваш комментарий. Не могли бы вы привести конкретный пример? – giusti