Theo em được biết thì khi realloc được thực thi, nó sẽ cấp phát thêm vào ngay tại vị trí vùng nhớ mà con trỏ đang trỏ tới, nếu vùng nhớ còn trống không đủ thì nó sẽ tiến hành dịch vùng nhớ bên cạnh để có đủ khoảng trống cấp phát, vậy thì nếu vùng nhớ bên cạnh bị dịch đi thì nó có thay đổi địa chỉ không ạ.
Ví dụ như em có 1 con trỏ a đc cấp phát 8 byte, con trỏ b đc cấp phát 4 byte ngay sát bên biến a, nếu em tiến hành realloc con trỏ a thì có phải chương trình phải dịch vùng nhớ được cấp phát cho b đi không ạ. Nếu vậy thì địa chỉ vùng nhớ mà con trỏ b trỏ vào sẽ bị thay đổi phải không ạ?
Realloc 1 con trỏ trong c có làm thay đổi địa chỉ các con trỏ khác trỏ tới?
Cảm ơn anh, vậy mà bữa em đi phỏng vấn xin thực tập, có ông pv nói em nếu không đủ vùng nhớ thì phải dịch các vùng nhớ kế bên làm em hoang mang bữa giờ.
Vậy nếu mình cần mở rộng kích thước của mảng thì dùng realloc hay dùng malloc rồi copy lại nội dung sau đó free vùng nhớ cũ cách nào nhanh hơn nhỉ?
Do malloc calloc realloc cấp phát theo kích thước nhất định (implementation-specific
) nên nhiều khả năng là thừa slot so với yêu cầu, vì vậy realloc sẽ nhanh hơn.
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?