Malloc là một tính năng trong ngôn ngữ C, trong khi new là một tính năng cơ bản trong C++. Malloc về cơ bản là một hàm tiêu chuẩn, trong khi new là một toán tử. Malloc không nên được sử dụng trong C++ mà không có lý do thiết yếu.
Không bao giờ được trộn mới/xóa với malloc/free. Không giống như malloc, new không cần kích thước của toán tử.
Các nội dung chính
- Malloc và new đều được sử dụng để cấp phát bộ nhớ động trong các chương trình C++.
- Malloc là một hàm thư viện C trả về một con trỏ tới một khối bộ nhớ có kích thước được chỉ định. Đồng thời, mới là một toán tử trong C++ cấp phát bộ nhớ và xây dựng một đối tượng thuộc một kiểu xác định.
- Mới an toàn hơn malloc vì nó đảm bảo rằng hàm tạo của đối tượng được gọi, điều này có thể ngăn ngừa lỗi và rò rỉ bộ nhớ.
Malloc vs Mới
Malloc là một hàm C tiêu chuẩn chỉ có thể được sử dụng trong C++ và không cho phép ghi đè hợp pháp. Nó là viết tắt của phân bổ bộ nhớ và được sử dụng để phân bổ một khối bộ nhớ. Mới là một toán tử chỉ được sử dụng trong C++; nó không thể được sử dụng trong C và tính toán kích thước của bộ nhớ bằng trình biên dịch.

Malloc yêu cầu biết kích thước chính xác của toán tử để tìm ra kích thước bộ nhớ mà nó phải phân bổ. Malloc cũng không có khả năng gọi đến hàm tạo. Nó trả về NULL khi phát hiện ra rằng có một số thiếu hụt bộ nhớ.
Toán tử mới không cần bất kỳ thông tin trước nào về kích thước chính xác của toán tử để chỉ định vị trí cho bộ nhớ. Toán tử new cũng có thể gọi hàm tạo của một đối tượng. Nó được biết là đưa ra một ngoại lệ khi thiếu bộ nhớ.
Bảng so sánh
Các thông số so sánh | Malloc | Mới |
---|---|---|
Vị trí trong ngôn ngữ | Malloc được sử dụng thường xuyên hơn trong C. Hiếm hơn và nó được sử dụng trong C++. | Mới chỉ được sử dụng trong C++. |
Hoàn trả | Nó trở về hư không. | Mới về đúng loại. |
Kích thước máy | Trong malloc, kích thước phải được tính toán thủ công. | Trong Mới, kích thước yêu cầu của trình biên dịch được tính toán bởi trình biên dịch |
Ghi đè | Chức năng malloc không thể bị ghi đè một cách hợp pháp. | Toán tử mới cung cấp cơ hội để ghi đè. |
Kiểu | Malloc là một hàm C tiêu chuẩn. | Nó sử dụng các toán tử như ==,+=, v.v. |
Hành vi khi không đủ bộ nhớ | Malloc trở về NULL khi thiếu bộ nhớ. | Mới đưa ra một ngoại lệ trong thời gian thiếu bộ nhớ. |
Phân bổ giao dịch | Một malloc() phải khớp với một free(). | Một () mới phải được khớp với một xóa (). |
Cấp phát bộ nhớ cho | Gần như tất cả mọi thứ. | Chỉ dành cho mảng, đối tượng và cấu trúc. |
Malloc là gì?
Malloc() là một hàm thư viện chuẩn trong C để cấp phát bộ nhớ. Nó được sử dụng để phân bổ động một khối bộ nhớ với kích thước cụ thể. Kích thước của bộ nhớ được phân bổ theo byte.
Nó trả về một kiểu con trỏ void vì nó mang một số giá trị rác. Nó không khởi tạo bộ nhớ tại thời điểm thực thi.
Hàm Malloc chỉ nên được sử dụng trong C++ khi nó rất cần thiết để sử dụng, nếu không, việc sử dụng nó chỉ nên được giới hạn ở C. Khi malloc cảm thấy thiếu bộ nhớ, nó ngay lập tức trả về NULL. Nó không thực hiện khởi tạo bộ nhớ.
Nó chứa 2 đối số. Một malloc() phải luôn khớp với một free(). Kích thước của bộ nhớ trong malloc phải được tính toán thủ công. Nó yêu cầu kiến thức trước về kích thước của người vận hành để phân bổ kích thước của bộ nhớ.
Nó không có khả năng gọi hàm tạo của một đối tượng. Hàm malloc có thể được sử dụng để phân bổ bộ nhớ cho hầu hết mọi thứ. Chức năng Malloc không cho phép ghi đè hợp pháp.
Một malloc hoạt động chậm hơn toán tử new trong C++ vì toán tử luôn nhanh hơn hàm.
Cú pháp:- ptr = (castType*) malloc(size);
Cái gì mới?
Mới là một toán tử trong C++ không được sử dụng trong C. Toán tử mới có thể gọi hàm tạo của đối tượng và có thể khởi tạo bộ nhớ. Hàm tạo chỉ được gọi sau khi bộ nhớ đã được cấp phát.
Trình biên dịch tính toán kích thước của bộ nhớ. Nó trở về đúng loại. Nó có thể sử dụng các toán tử như ==, +=, v.v. Toán tử mới chỉ cấp phát bộ nhớ cho mảng, đối tượng và cấu trúc.
Trong C++, toán tử new được áp dụng để đưa ra yêu cầu cấp phát bộ nhớ trên heap.
Với điều kiện là có đủ bộ nhớ, toán tử mới sẽ khởi tạo nó và sau đó hoạt động để trả lại bộ nhớ mới được cấp phát và tạo thành cho biến con trỏ. Một() mới phải luôn được khớp với một xóa().
Toán tử này được sử dụng để cấp phát bộ nhớ động, xây dựng và hủy đối tượng. Bộ nhớ được phân bổ cho các đối tượng từ một nhóm được gọi là kho lưu trữ miễn phí. Nó hoạt động nhanh hơn nhiều so với malloc vì nó là toán tử chứ không phải hàm.
Cú pháp:- biến con trỏ = kiểu dữ liệu mới;
Sự khác biệt chính giữa Malloc và Mới
- Malloc là một hàm C tiêu chuẩn, trong khi new là một toán tử.
- Malloc được sử dụng trong C trong khi new chỉ được sử dụng trong C++. Malloc chỉ nên được sử dụng trong C++ khi cần thiết.
- Khi không đủ bộ nhớ, malloc trả về NULL trong khi new đưa ra một ngoại lệ.
- Luôn phải khớp malloc() với free() và new() với xóa. Hai cái này không nên thay thế cho nhau
- Malloc trả về void trong khi new trả về loại thích hợp.
- Malloc phân bổ bộ nhớ cho hầu hết mọi thứ và mọi thứ. Bộ nhớ cấp phát mới cho mảng, đối tượng và cấu trúc.
- Kích thước phải được tính toán thủ công cho malloc, trong khi ở phiên bản mới, nó được trình biên dịch tính toán tự động.
- Hàm Malloc không thể gọi hàm tạo của đối tượng, nhưng toán tử new thì có thể.
- Ghi đè không được phép hợp pháp trong malloc nhưng được phép trong new.