Tôi đã theo ấn tượng rằng alloc
trong Objective-C (khi chúng ta gọi [anyObject alloc]
được thực sự thực hiện chức năng C malloc
và bộ nhớ bị phân bổ trong đống, nhưng không thể tìm thấy bất cứ nơi nào câu trả lời cho việc này.phân bổ, malloc và alloca - Sự khác biệt là gì?
Ngoài ra, trong khi tìm kiếm cho alloc
, tôi thấy alloca
đó cấp phát bộ nhớ trong stack. Nếu tôi không sai, alloc
cấp phát bộ nhớ trong heap để tạo các đối tượng.
vì vậy, sự khác biệt giữa alloc
và malloc
(và alloca
) là gì? ai có thể vui lòng tóm tắt ?
"Các tình huống nơi alloca() phù hợp là rất hiếm. Trong hầu hết mọi trường hợp, bạn nên sử dụng malloc() để cấp phát bộ nhớ." Không. Tất cả 'alloca()' đều cung cấp các mảng chiều dài biến đổi. Không có sự khác biệt thực tế giữa 'int n = 6; double x [n]; 'và' int n = 6; double * x = alloca (n * sizeof (* x)); 'Không chỉ vậy, việc sử dụng' malloc() 'trong các chương trình đa luồng có thể là một nút cổ chai hiệu suất nghiêm trọng. –
Truy vấn của tôi đã được nhiều hơn về mục tiêu-C mà thực hiện '[[someObject alloc] init]' để cấp phát bộ nhớ và khởi tạo đối tượng trong heap. Liệu '[someObject alloc]' có triển khai 'malloc' trong nền? –
@AndrewHenle Tôi đã không nói rằng có * không * tình huống mà 'alloca()' là thích hợp; Tôi nói rằng họ rất hiếm. VLAs là một trong những trường hợp chúng hữu ích, nhưng thậm chí ở đó chúng chủ yếu là một tối ưu hóa. Vì OP rõ ràng là mới đối với lập trình C, nên tôi đã chọn không đi sâu vào chi tiết. :) – duskwuff