Hôm nay mình sẽ hướng dẩn cách sử dụng Visual Leak Detector(VLD) để phát hiện memory leak trong chương trình Visual C++. Hiểu một cách đơn giản, memory leak là bug và nó không làm chương trình bị crash lúc runtime nhưng nó lại ảnh hướng tới tài nguyên hệ thống, xảy ra khi bộ nhớ ở heap được cấp phát nhưng quên giải phóng. Phát hiện memory leak là công việc hết sức khó khăng nếu ta không nắm rỏ về con trỏ và cấp phát động trong C++, nhưng may thay công cụ vld đã được xây dựng để hổ trợ cho việc xác định memory leak trong Visual C++ nhờ đó việc phát hiện leak trở nên đơn giản và trực quan hơn.
Phần giới thiệu đã xong, bây giờ chúng ta bắt tay vào chủ đề chính. Đầu tiền các bạn tải vld tại trang chủ hoặc tải tại đây sau khi tải về các bạn có folder như sau:
Mô hình MVC là một mô hình thiết kế giúp chúng ta tách ứng dụng thành các thành phần khác nhau, các thành phần có nhiệm vụ riêng biệt và độc lập với nhau. Nhờ việc hoạt động đập lập và tách biệt nhau mà việc nâng cấp và sửa lỗi ứng dụng trở nên đơn giản hơn bao giờ hết.
MVC chia ứng dụng làm 3 thành phần là Model, View và Controller, cụ thể như sau:
Chắc hẳng các bạn đã biết tới enum, const hay đơn giản là define có thể sử dụng để định nghĩa cho những con số khô khan bằng các tên dể nhớ như: SUMMER = 1, SPRING = 2, WINTER = 3, AUTUMN = 4. Và khi sử dụng thì thay vì phải nhớ 1, 2, 3, 4 thì ta chỉ cần nhớ SUMMER, SPRING, WINTER hay AUTUMN nhờ đó mà ta không bị lẩn lộn hoặc quên các giá trị đó.
Chắc hẳng các bạn đã biết tới enum, const hay đơn giản là define có thể sử dụng để định nghĩa cho những con số khô khan bằng các tên dể nhớ như: SUMMER = 1, SPRING = 2, WINTER = 3, AUTUMN = 4. Và khi sử dụng thì thay vì phải nhớ 1, 2, 3, 4 thì ta chỉ cần nhớ SUMMER, SPRING, WINTER hay AUTUMN nhờ đó mà ta không bị lẩn lộn hoặc quên các giá trị đó.
Trong C++ quá trình biên dịch source code của chúng ta sang file thực thi hoặc thư viện diễn ra khá nhiều bước, trong đó 2 bước chính là compile và linker là 2 bước sẽ kiểm tra các lỗi và thông báo cho ta biết ở cửa sổ output. Việt nắm được quá trình đi từ mã code của chúng ta sang file cuối cùng(file thực thi hoặc file thư viện) khá quan trọng, nó hổ trợ cho quá trình debug, tối ưu code và tăng tốc biên dịch chương trình rất nhiều.
Dưới đây là sơ đồ về quá trình Source compile process trong C++, nó mô tả tổng quan về tất cả các giai đoạn tiền xử lý đến biên dịch và liên kết để cho ra được file thực thi/thư viện cuối cùng:
Điểm làm nên thương hiệu của C/C++ chính là con trỏ, một loại biến đặt biệt, nó lưu địa chỉ của những biến khác(đúng hơn là lưu địa chỉ của vùng nhớ). Nên nhớ rằng cái gì cũng có tính hai mặt, con trỏ(pointer) tuy mạnh nhưng cũng rất nguy hiểm nếu không biết cách sử dụng. Đọc đến đây chắc hẳn các bạn sẽ tự hỏi tại sao lại phải lưu địa chỉ của biến khác, tại sao lại gọi con trỏ là thương hiệu của C/C++, phần bên dưới sẽ giải đáp phần nào 2 câu hỏi đó.