Hàm malloc va hàm free
mọi người cho em hỏi xíu là theo em được biết thì hàm free là dùng để Trả về vùng nhớ được cấp phát bởi hàm malloc() vậy thì hàm free hoạt động ra sao ý của em ở đây là hàm free nó sẽ hủy vùng nhớ của con trỏ như thế nào vd cụ thể như thế này cho mọi người có thể hiểu được câu hỏi của em nhé vd nó hủy vùng nhớ là nó dùng bút tẩy xóa đi hay là nó hoạt động như thế nào ý em là cách thu hoạt động của hàm free nó đã làm cách nào và hoạt động ra sao để có thể hủy được vùng nhớ đã được cấp phát mỗi người có hiểu ý của em ko ạ
Theo mình hiểu là khi dùng hàm malloc() tức là báo với hệ điều hành cấp phát cho tôi 1 vùng nhớ để sử dụng, và hệ điều hành cũng phải có cơ chế quản lý để ghi nhớ vùng nhớ vừa được cấp phát.
Còn với hàm free() thì nghĩa là báo với hệ điều hành vùng nhớ cấp phát cho tôi không sử dụng nữa, hệ điều hành sẽ không đi xoá trực tiếp vùng nhớ mà nó cấp phát, mà hệ điều hành sẽ ghi nhớ là vùng nhớ đó đã được trả lại, nếu ai muốn sử dụng thì có thể lấy, nghĩa là dữ liệu ở vùng nhớ đó chưa bị mất nếu chưa bị cấp phát cho người khác sử dụng, nhưng ta không được phép truy cập đến vùng nhớ này nữa (vì hệ điều hành không cho phép).
mình cũng biết vậy nhưng ý của mình ko phải vậy mà ý của mình là như bạn nói ở trên thì hệ điều hành cũng phải có cơ chế quản lý để ghi nhớ vùng nhớ vừa được cấp phát và ý mình muốn hỏi là cơ chế đó nó hoạt động như thế nào và hàm free nó có hoạt động giống như cơ chế của hệ điều hành ko ý của mình là nó hoạt động theo cách nào để xóa đi vùng nhớ đó mới là ý mà mình muốn hỏi vd để bạn hiểu câu hỏi của mình nhé vd khi mình viết sai 1 từ gì đó trong bài kiểm tra mình thì dùng bút tẩy để xóa đi còn thằng bạn mình thì nó xé luôn tờ đó rồi vứt đi ý mình là hàm hủy free đó nó sẽ hoạt động theo cơ chế nào nó dùng cách nào và như thế nào để hủy và nó hoạt động như thế nào đó mới là ý mình muốn hỏi
malloc() cùng với một DSLK là trung gian gọi OS mở vùng nhớ và quản lí vùng nhớ cho chương trình.
free() chỉ chạy dọc theo tìm và bứt ra khỏi danh sách.
Bên Linux thì OS chỉ biết tới đây là phần của chương trình anh, từ đó trở ra anh đi vào là lỗi ngay.
(cái này chung) Con trỏ không trỏ vào một chỗ nào trên RAM mà nó trỏ vào virtual address space được chia làm nhiều page 4K, mỗi page được gắn với một chỗ nào đấy trên RAM hoặc bộ nhớ ảo, hoặc chưa được khởi tạo. Với yêu cầu cấp phát đủ lớn thì xin hẳn một số trang sẽ tốt hơn là giãn biên như trên.
Mỗi process nhận được 1 virtual space riêng mindblown nên viết lên process khác không dễ, muốn vậy phải can thiệp bằng các API