я был под впечатлением, что alloc
в Objective-C (когда мы вызываем [anyObject alloc]
фактически реализует функцию malloc
C и память получать выделенной в куче, но не мог найти где-нибудь ответ на это.alloc, malloc и alloca - В чем разница?
Кроме того, при поиске для alloc
, я нашел alloca
который выделяет память в стеке. Если я не ошибаюсь, alloc
выделяет память в куче для создания объектов.
Итак, в чем разница между alloc
и malloc
(и alloca
)? Может кто-нибудь пожалуйста, обобщать ?
«Ситуации, в которых подходит alloca(), встречаются редко. Почти во всех ситуациях вы должны использовать malloc() для выделения памяти». Нет. Все 'alloca()' is предоставляет массивы переменной длины. Нет никакой практической разницы между 'int n = 6; double x [n]; 'и' int n = 6; double * x = alloca (n * sizeof (* x)); 'Не только это, использование' malloc() 'в многопоточных программах может быть серьезным узким местом производительности. –
Мой запрос был больше с точки зрения Objective-C, который реализует '[[someObject alloc] init]' для выделения памяти и инициализации объекта в куче. Этот '[someObject alloc]' реализует 'malloc' в фоновом режиме? –
@AndrewHenle Я не сказал, что есть * no * ситуации, где 'alloca()' подходит; Я сказал, что они редки. VLA - один из тех случаев, когда они полезны, но даже там они по сути являются оптимизацией. Поскольку ОП явно не знаком с программированием на С, я решил не углубляться в детали. :) – duskwuff