Malloc vs Mới
Một trong những câu hỏi phỏng vấn phổ biến nhất trong việc thuê một lập trình viên máy tính là để người nộp đơn / lập trình viên máy tính giải thích sự khác biệt giữa malloc và mới. Cả malloc và new đều tồn tại trong lĩnh vực ngôn ngữ máy tính và thường được các lập trình viên máy tính sử dụng để phân bổ bộ nhớ động.
Sự khác biệt cơ bản giữa hai loại này là malloc tồn tại trong ngôn ngữ C trong khi mới là một tính năng cụ thể của ngôn ngữ C ++. Malloc cũng là một hàm (mà, đối với các lập trình viên, cần một chút thời gian để thực thi) trong khi mới là một chương trình toán tử (giúp cắt giảm thời gian thực hiện). Đây là một lợi ích từ toán tử mới vì các lập trình viên thực hiện lập trình thời gian thực có nhu cầu chọn phương pháp nhanh nhất để sử dụng.
Toán tử mới là loại an toàn không giống như hàm malloc.
Hàm malloc là chức năng thư viện cho ngôn ngữ C. Tất cả những gì nó làm là phân bổ bộ nhớ và trả về một con trỏ tới nó. Mặt khác, toán tử mới là một cấu trúc mức ngôn ngữ và công việc của nó là khởi tạo một đối tượng bằng cách phân bổ bộ nhớ và gọi các hàm tạo thích hợp. Một điểm khác biệt của hàm malloc từ toán tử mới là malloc yêu cầu gõ chính tả trong khi khai báo trong khi trước đó thì không. Ngoài ra, hàm malloc sử dụng từ "miễn phí" để xóa bộ nhớ trong khi xóa xóa xóa được sử dụng trong toán tử mới cho mục đích tương tự.
Cả hai cũng có những cách khác nhau để đối phó với sự thất bại và cạn kiệt bộ nhớ. Nếu chức năng malloc thất bại, nó trả về với một con trỏ NULL. Toán tử mới không bao giờ trả về một con trỏ NULL mà chỉ ra lỗi bằng cách ném một ngoại lệ thay vào đó. Đây là một lợi thế cho toán tử mới vì lập trình viên máy tính không phải kiểm tra con trỏ trả về mỗi khi nó gọi mới cũng như lập trình viên máy tính sẽ bỏ lỡ một ngoại lệ như vậy.
Hàm malloc không xây dựng một đối tượng (được gọi là constructor của đối tượng) nhưng toán tử mới thực hiện. Một ưu điểm khác của cái mới là toán tử có thể bị quá tải trong khi chức năng malloc không thể. Toán tử mới yêu cầu một số lượng đối tượng cụ thể để phân bổ trong khi hàm malloc yêu cầu chỉ định tổng số byte để phân bổ.
Bộ nhớ cũng có thể được điều chỉnh lại kích thước hoặc phân bổ lại bằng cách sử dụng chức năng malloc bằng cách sử dụng realloc. Tuy nhiên, toán tử mới không thể thực hiện chức năng này và tính nó là một trong những nhược điểm chính của toán tử. Một ưu điểm khác của chức năng malloc so với toán tử mới là malloc có thể mở rộng nhanh chóng bộ nhớ. Điều này vẫn đang sử dụng malloc và realloc. Khi thực hiện tình huống tương tự trong ngôn ngữ C ++, lập trình viên phải tạo ra một đoạn bộ nhớ mới với toán tử mới. Bộ nhớ mới phải có kích thước được sửa đổi và sẽ được sao chép qua dữ liệu từ bộ đệm ban đầu. Bộ đệm ban đầu phải được xóa sau khi sao chép. Đây có thể là một quá trình chậm chạp cho một lập trình viên.
Toán tử mới có đòn bẩy trên hàm malloc bằng cách trả về kiểu dữ liệu chính xác trong khi hàm trả về void *. Chức năng malloc cũng không thể bị quá tải so với toán tử mới trong đó có thể quá tải. Một tính năng khác của toán tử mới là ít có khả năng mắc lỗi với toán tử so với hàm malloc. Đây được coi là một điểm cộng cho các lập trình viên đặc biệt nếu họ đang viết nhiều mã hoặc làm việc với một mã theo một lịch trình chặt chẽ. Chức năng malloc và miễn phí có thể được sử dụng trong C ++, nhưng nó không thể được sử dụng trực tiếp. Thay vào đó, nên sử dụng mới và xóa.
Tóm lược:
1. Malloc là một chức năng trong khi mới là một nhà điều hành.
2. Mới là một tính năng cụ thể của ngôn ngữ C ++ trong khi malloc được sử dụng trong ngôn ngữ C.
3. Toán tử mới theo sau với xóa xóa trong khi malloc đi với chức năng miễn phí.
4. Hàm malloc là hàm thư viện cho ngôn ngữ C trong khi toán tử mới là cấu trúc cấp ngôn ngữ từ ngôn ngữ C ++.