Nhờ giúp viết Code cách check các biến chưa được giải phóng khỏi bộ nhớ

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,348
Được thích
12,606
Điểm
1,560
Dạo tôi đi "cua" bà xã tôi thì tôi ở SG và bả đang ở Mỹ tho.
Mỗi ngày tôi siêng năng đu xe đò từ bến xe miền Tây về Mỹ tho. Nhưng xe Mỹ tho đỗ ở bến (vừa qua Trung lương, vào thành là bến rồi). Cho nên tôi đi xe Chợ gạo. Vừa qua cầu Nguyễn Trãi thì tôi nhảy xuống (xe không dám dừng, vì công an thấy sẽ phạt) và đi bộ về nhà cô ấy.
Chiều lại tôi đón xe Chợ gạo cũng khoảng chỗ ấy mà về SG.
Có những buổi "bịn rịn ướt át" (như nhạc bô lê rô vậy) quá nên chỉ còn chuyến xe chót, chật người.
Tôi kể chuyện để bà con biết chuyện đi xe nhảy, đu, ngồi tùm lum chỗ chả lạ gì với tôi cả. Hai lần rùng rợn nhất là:
Lần 1. phải đeo cái thang leo sau xe cho tới gần Tân An. Đeo một bên thang, bên kia là anh lơ xe. Đến gần Tân An mới có người xuống bớt và tôi được vào trong xe.
Lần 2. phải ngồi lên cái nắp máy kế tài xế, ngay sát cái cần số. Tôi không sợ anh tài "nắm lộn cần số" nhưng phải nói là cái nắp máy nó nóng cháy đít. Về tới bến Bình chánh là đít tôi bốc khói ngùn ngụt.
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,348
Được thích
12,606
Điểm
1,560
Vấn đề là biết trước và không leo lên, dù trong hay ngoài. Tuy nói vậy nhưng khó, đang đói bài thì bất chấp
Trường hợp của tôi là chuyến xe cuối cùng của ngày bác ơi. Không nhảy lên không được.
Trễ xe ở lại cũng không đến nỗi chết (chỉ mất công trình báo công an phường). Nhưng mà làm vậy mất mặt với bên cô ấy lắm. Hồi xưa đâu phải như bây giờ tụi trẻ chúng muốn ngủ lang ở đâu cũng được.

Vả lại, nếu cái gì nó cũng có cái giá của nó thì những cái mình trả giá đắt nó cũng có hiệu dụng sau này. Mấy chục năm rồi, mỗi lần giận tôi (quên ngày cưới) cô ấy nghĩ lại cái nghề "nhảy xe" của tôi là nguôi ngoai ngay. Mấy chục năm tôi có mua cho cô ấy món quà sinh nhật hay va -lăn-tin gì đâu (tôi bài Tây mờ, không thích theo lệ bọn Tây)
 

ptm0412

Bad Excel Member
Thành viên BQT
Super Moderator
Tham gia ngày
4 Tháng mười một 2007
Bài viết
10,018
Được thích
29,917
Điểm
1,910
Tuổi
58
Nơi ở
Gò Vấp
Trường hợp của tôi là chuyến xe cuối cùng của ngày bác ơi. Không nhảy lên không được.
Ý tôi nói bạn mà tôi trích dẫn chứ không phải anh, và việc lên xe buýt đến điểm X không phải là yêu cầu bắt buộc như anh.
Cũng có khi muốn tự thử thách việc khó nhưng phải tự lượng sức trước tiên.
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,348
Được thích
12,606
Điểm
1,560
Ý tôi nói bạn mà tôi trích dẫn chứ không phải anh, và việc lên xe buýt đến điểm X không phải là yêu cầu bắt buộc như anh.
Cũng có khi muốn tự thử thách việc khó nhưng phải tự lượng sức trước tiên.
Tôi hiểu là bác nói bạn kia. Mình hết chuyện rồi nên mượn bàn phím để bàn phiếm chơi vậy thôi. :p
 

Love GPE

Thành viên mới
Tham gia ngày
17 Tháng hai 2020
Bài viết
34
Được thích
14
Điểm
15
Dạo tôi đi "cua" bà xã tôi thì tôi ở SG và bả đang ở Mỹ tho.
Mỗi ngày tôi siêng năng đu xe đò từ bến xe miền Tây về Mỹ tho. Nhưng xe Mỹ tho đỗ ở bến (vừa qua Trung lương, vào thành là bến rồi). Cho nên tôi đi xe Chợ gạo. Vừa qua cầu Nguyễn Trãi thì tôi nhảy xuống (xe không dám dừng, vì công an thấy sẽ phạt) và đi bộ về nhà cô ấy.
Chiều lại tôi đón xe Chợ gạo cũng khoảng chỗ ấy mà về SG.
Có những buổi "bịn rịn ướt át" (như nhạc bô lê rô vậy) quá nên chỉ còn chuyến xe chót, chật người.
Tôi kể chuyện để bà con biết chuyện đi xe nhảy, đu, ngồi tùm lum chỗ chả lạ gì với tôi cả. Hai lần rùng rợn nhất là:
Lần 1. phải đeo cái thang leo sau xe cho tới gần Tân An. Đeo một bên thang, bên kia là anh lơ xe. Đến gần Tân An mới có người xuống bớt và tôi được vào trong xe.
Lần 2. phải ngồi lên cái nắp máy kế tài xế, ngay sát cái cần số. Tôi không sợ anh tài "nắm lộn cần số" nhưng phải nói là cái nắp máy nó nóng cháy đít. Về tới bến Bình chánh là đít tôi bốc khói ngùn ngụt.
Lần 2 ko cẩn thận lại hỏng cả nồi khoai Thầy ạ :p
 

Vô danh Tiểu tốt

Thành viên thường trực
Tham gia ngày
22 Tháng một 2014
Bài viết
296
Được thích
326
Điểm
410
Câu hỏi này thú vị phết mà giờ mới biết. Nhưng theo những gì mà tôi đã biết qua thì các biến được giải phóng khỏi bộ nhớ hoàn toàn không giống cách hiểu của đa số mọi người ở đây.
Trong các ngôn ngữ bậc thấp, khi bạn khai báo một biến trong chương trình thì nghĩa là chương trình đó đã trong bộ nhớ một khoảng vừa đủ để chứa dữ liệu tương lai của cái biến đấy. Trong ngôn ngữ C hay C++, nếu chương trình khai báo một biến X kiểu int đồng nghĩa với việc chương trình đó xí ngay một chỗ rộng 4 byte (hay 2 byte) gì đó trên RAM. Và một điều khá buồn cười là dù chưa làm ăn gì với cái biến X đó thì rất có thể nó đã chứa sẵn một giá trị ngẫu nhiên rồi chứ hổng phải là giá trị 0 mặc định như trong nhiều ngôn ngữ khác. Giá trị ngẫu nhiên này chính là những gì còn sót lại trong ô nhớ RAM trước đó mà cái biến X vô tình được cấp lại đúng các ô nhớ này. Bởi thế với C/C++, khởi tạo các giá trị cụ thể cho biến nào đó là điều giúp chương trình tránh được những lỗi logic đau đầu.

Với các ngôn ngữ bậc cao hơn chẳng hạn như VB, người ta làm sẵn cái khâu khởi tạo này. Chẳng hạn trong VB, tôi khai báo biến X kiểu đồng nghĩa với 2 việc:
[1] cấp phát bộ nhớ​
[2] đưa dữ liệu vùng nhớ đó về giá trị mặc định là 0.​
Với các kiểu dữ liệu phức tạp hơn nhưng struct, object, thì chắc hẳn sẽ có nhiều bước phức tạp và trình biên dịch tạo ra một cơ chế đặc thù quản lý các biến có kiểu này.

Bởi thế ở cái thời dung lượng RAM máy tính chỉ tính bằng MB (tương đương 0.1-0.4% dung lượng bộ nhớ tiêu chuẩn bây giờ), VB6 bắt buộc bạn bỏ đi những biến không bao giờ dùng đến khi biên dịch nhằm tối ưu việc sử dụng bộ nhớ (vì cứ khai báo là nó chiếm bộ nhớ rồi). Việc giải phóng bộ nhớ nếu có chỉ xẩy ra khi ta bước ra khỏi vùng có khai báo biến đó nhưng thực chất cũng chả có cái "giải phóng bộ nhớ" đúng nghĩa bao giờ. Các dẫy ô nhớ có độ dài khác nhau đã được cấp phát trước đó dù không còn dùng đến vẫn khó được thu hồi lại và dẫn đến hiện tượng phân mảnh RAM.

Và cách giải quyết cho tình huống đau đầu này chính là tăng dung lượng RAM. Từ dung lượng tính bằng đơn vị KB, sau nhiêu năm đã nhẩy lên MB và nay là GB, mỗi lần thay đổi đơn vị tính, dung lượng RAM lại tăng thêm hơn 1000 lần. Các máy hoạt động càng lâu, đóng mở nhiều app, nhiều thread tương đương với việc khai báo nhiều biến.. thì càng phải dự phòng một bộ nhớ càng lớn. Điều này không chỉ xẩy ra với Windows mà còn là sự đau đầu của Android. Trong Android có một app tối ưu sử dụng RAM nhưng chỉ có thể kích hoạt bằng tay con người chứ Android cũng hổng dám tự động giải quyết. Tuy nhiên hệ điều hành của Apple giải quyết tương đối thành công vấn đề này cho nên RAM trong các thiết bị của Apple thường chỉ bằng 1/2 thậm chí là 1/4 dung lượng RAM các thiết bị có hiệu năng tương đương chạy hệ điều hành khác.

Chốt lại, "Giải phóng bộ nhớ" chỉ là khái niệm tồn tại trong đầu chúng ta chứ chả có trong máy tính trừ khi restart. Bạn đã khai báo một biến bất kỳ thì nó nghiễm nhiên chiếm đủ số bộ nhớ tiêu chuẩn dành cho nó dù có dùng đến hay không. Bác nào có thể giải quyết vấn nạn "chiếm dụng bộ nhớ vô ích" triệt để thì Microsoft, Google... thậm chí Apple sẽ đưa hẳn chuyên cơ đón bác cùng dòng họ qua Mỹ. --=0
 
Lần chỉnh sửa cuối:

thuyyeu99

Trùm Nhiều Chuyện
Tham gia ngày
6 Tháng sáu 2008
Bài viết
1,629
Được thích
777
Điểm
860
Hèn chi em thấy Apple chạy mượt hơn Androi, kỳ này để dành tiền mua cái ĐT Apple quá:p
 
Top Bottom