01/10/2018, 08:20
Tái cấp phát vùng nhớ nhỏ hơn bằng realloc() trong C
Em đang học đến phần cấp phát động trong C
Em muốn hỏi nếu tái cấp phát vùng nhớ nhỏ hơn bằng realloc() thì phần vùng nhớ bị giảm đi có được giải phóng ko ạ?
Bài liên quan
Không bạn. Nó vẫn còn nằm trong bộ nhớ, và khi realloc giảm xuống thì sẽ ko còn giải phóng nó được nữa.
Tùy OS. Nguyên tắc là những ô nhớ đã xả rồi thì không truy cập được nữa.
Hi Luong Tien Dong.
Ý bạn giải phóng là sao ?
tức làm như lệnh free() ấy, giải phóng để nó có thể dùng bộ nhớ cho việc khác
Hi Luong Tien Dong…
Vùng nhớ đó được giải phòng.
Trong trường hợp vùng nhớ đó là con trỏ thì phần bộ nhớ được con trỏ đó trỏ tới có thể bị dò nếu không còn tham chiếu. @_@!
Cũng tuỳ trường hợp thôi
Vì cấp phát mảng động cũng nguyên tắc cũng như mảng tình, nó cần một vùng nhớ gồm các ô nhớ liên tục nhau tuỳ trước hợp mà nó linh động khác nhau thôi.
VD: Khi co mảng lại thì có thể nó vẫn ở vùng nhớ cũ và co lại, các ô cũ không còn xài nữa thì nó báo với OS là tao đã giải phóng nó rồi, mày có cần gì thì lấy xài, còn nếu OS không cần dùng đến thì nó vẫn còn nguyên giá trị cũ. Hoặc cũng có thể (cái này thường là khi nới rộng mảng ra thôi) vì tính chất các ô nhớ liên tục nhau, VD vùng nhớ hiện tại phía sau nó không còn ô nhớ nào thì nó buộc phải cấp một vùng nhớ mới và copy các giá trị cũ sang và trả về cho Bạn địa chỉ vùng nhớ mới, các ô cũ cũng sẽ được báo về OS như ở trên.