sách gpt4 ăn đã đi

Nói sáo rỗng về quản lý bộ nhớ C/C++

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN về quản lý bộ nhớ C/C++ này được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Phương pháp cấp phát bộ nhớ.

Giới thiệu.

Trong C++, bộ nhớ được chia thành 5 vùng, đó là heap, stack, vùng lưu trữ miễn phí, vùng lưu trữ toàn cục/tĩnh và vùng lưu trữ không đổi.

Ngăn xếp: Khi thực thi một hàm, các đơn vị lưu trữ cho các biến cục bộ trong hàm có thể được tạo trên ngăn xếp và các đơn vị lưu trữ này sẽ tự động được giải phóng khi hàm kết thúc. Hoạt động cấp phát bộ nhớ ngăn xếp được tích hợp sẵn trong tập lệnh của bộ xử lý và rất hiệu quả nhưng dung lượng bộ nhớ được cấp phát bị hạn chế.

Heap: Đó là những khối bộ nhớ được cấp phát mới. Trình biên dịch không quan tâm đến việc phát hành chúng. Nói chung, một khối mới tương ứng với một lần xóa. Nếu lập trình viên không giải phóng nó, hệ điều hành sẽ tự động tái chế nó sau khi chương trình kết thúc.

Vùng lưu trữ miễn phí: Đó là những khối bộ nhớ được phân bổ bởi malloc, v.v. Nó rất giống với heap, nhưng nó sử dụng free để kết thúc vòng đời của nó.

Vùng lưu trữ toàn cục/tĩnh: Biến toàn cục và biến tĩnh được phân bổ vào cùng một bộ nhớ Trong ngôn ngữ C trước đó, các biến toàn cục được chia thành biến khởi tạo và biến không khởi tạo trong C++. Chúng chiếm cùng một vùng bộ nhớ. khu vực.

Vùng lưu trữ cố định: Đây là vùng lưu trữ tương đối đặc biệt. Chúng lưu trữ các hằng số và không được phép sửa đổi.

  。

Các lỗi bộ nhớ thường gặp và giải pháp khắc phục.

Lỗi bộ nhớ có thể rất rắc rối. Trình biên dịch không thể tự động phát hiện những lỗi này và thường phát hiện chúng khi chương trình đang chạy. Hầu hết các lỗi này không có triệu chứng rõ ràng và xuất hiện rồi biến mất khiến việc sửa chữa trở nên khó khăn hơn. Đôi khi người dùng giận dữ đến gặp bạn, nhưng chương trình không xảy ra vấn đề gì. Khi bạn rời đi, lỗi lại xảy ra.

Các lỗi bộ nhớ thường gặp và cách khắc phục như sau:

Việc cấp phát bộ nhớ không thành công nhưng nó đã được sử dụng. Những lập trình viên mới thường mắc lỗi này vì họ không nhận ra rằng việc cấp phát bộ nhớ có thể thất bại. Một giải pháp phổ biến là kiểm tra xem con trỏ có phải là NULL hay không trước khi sử dụng bộ nhớ. Nếu con trỏ p là tham số của hàm thì hãy sử dụng khẳng định (p!=NULL) để kiểm tra mục nhập của hàm. Nếu bạn sử dụng malloc hoặc new để áp dụng cho bộ nhớ, bạn nên sử dụng if(p==NULL) hoặc if(p!=NULL) để ngăn ngừa lỗi.

Mặc dù việc cấp phát bộ nhớ thành công nhưng nó vẫn được tham chiếu trước khi được khởi tạo. Có hai lý do chính dẫn đến sai lầm này: một là không có khái niệm khởi tạo; hai là giá trị ban đầu mặc định của bộ nhớ bị nhầm tưởng là tất cả bằng 0, dẫn đến lỗi khi tham chiếu giá trị ban đầu (chẳng hạn như dưới dạng một mảng). Không có tiêu chuẩn thống nhất nào cho giá trị mặc định ban đầu của bộ nhớ. Mặc dù đôi khi nó bằng 0, nhưng chúng ta thà tin tưởng nó còn hơn là tin tưởng nó. Vì vậy, cho dù bạn sử dụng phương pháp nào để tạo mảng, đừng quên gán giá trị ban đầu. Ngay cả việc gán giá trị 0 cũng không thể bỏ qua. Đừng quá rắc rối.

Việc cấp phát bộ nhớ đã thành công và được khởi tạo nhưng thao tác đã vượt qua ranh giới bộ nhớ. Ví dụ: khi sử dụng một mảng, thao tác chỉ số dưới "lớn hơn 1" hoặc "nhỏ hơn 1" thường xảy ra. Đặc biệt trong các câu lệnh vòng lặp for, rất dễ xảy ra sai số vòng lặp, khiến các thao tác mảng vượt quá giới hạn.

Quên giải phóng bộ nhớ, gây rò rỉ bộ nhớ. Hàm chứa lỗi này sẽ mất một khối bộ nhớ mỗi lần nó được gọi. Ban đầu hệ thống có đủ bộ nhớ và bạn sẽ không thấy lỗi. Cuối cùng, chương trình đột ngột bị chết và hệ thống hiển thị lời nhắc: cạn kiệt bộ nhớ. Ứng dụng và giải phóng bộ nhớ động phải được ghép nối và số lần sử dụng malloc và free trong chương trình phải giống nhau, nếu không chắc chắn sẽ xảy ra lỗi (điều tương tự đối với mới/xóa).

Giải phóng bộ nhớ nhưng vẫn tiếp tục sử dụng nó.

Có ba tình huống:

(1). Mối quan hệ gọi đối tượng trong chương trình quá phức tạp và thực sự rất khó để biết liệu một đối tượng đã giải phóng bộ nhớ hay chưa. Tại thời điểm này, cấu trúc dữ liệu cần được thiết kế lại để giải quyết cơ bản sự hỗn loạn trong việc quản lý đối tượng.

(2). Câu lệnh trả về của hàm được viết không chính xác. Hãy cẩn thận để không trả về một "con trỏ" hoặc "tham chiếu" trỏ đến "bộ nhớ ngăn xếp" vì bộ nhớ này sẽ tự động bị hủy ở cuối thân hàm.

(3). Sau khi sử dụng free hoặc delete để giải phóng bộ nhớ, con trỏ không được đặt thành NULL. Kết quả là "con trỏ hoang dã".

Vậy làm thế nào để tránh tạo ra con trỏ hoang dã? Dưới đây là 5 quy tắc. Hãy chú ý hơn khi viết chương trình và phát triển những thói quen tốt.

Quy tắc 1: Sau khi đăng ký bộ nhớ bằng malloc hoặc new, bạn nên kiểm tra ngay xem giá trị con trỏ có phải là NULL hay không. Ngăn chặn việc sử dụng bộ nhớ có giá trị con trỏ NULL.

Quy tắc 2: Đừng quên khởi tạo mảng và bộ nhớ động. Ngăn chặn việc sử dụng bộ nhớ chưa được khởi tạo làm giá trị.

Quy tắc 3: Tránh chỉ số dưới giới hạn của mảng hoặc con trỏ, đặc biệt hãy cẩn thận với các thao tác "thêm 1" hoặc "nhỏ hơn 1".

Quy tắc 4: Ứng dụng và giải phóng bộ nhớ động phải được ghép nối để tránh rò rỉ bộ nhớ.

Quy tắc 5: Sau khi giải phóng bộ nhớ bằng free hoặc delete, hãy đặt ngay con trỏ về NULL để ngăn việc tạo ra "con trỏ hoang dã".

Những sáo ngữ trên về quản lý bộ nhớ C/C++ là toàn bộ nội dung mà biên tập viên đã chia sẻ với các bạn, hy vọng có thể cho các bạn tham khảo và mong các bạn ủng hộ mình nhiều.

Cuối cùng, bài viết về quản lý bộ nhớ C/C++ sáo rỗng này kết thúc ở đây. Nếu bạn muốn biết thêm về quản lý bộ nhớ C/C++ sáo rỗng, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. blog tương lai! .

26 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress