malloc() là một hàm thường được thực hiện bởi thư viện thời gian chạy. Bạn có quyền, nếu bạn đang chạy trên một hệ điều hành, sau đó malloc đôi khi (nhưng không phải mọi lần) kích hoạt một cuộc gọi hệ thống mà làm cho hệ điều hành bản đồ một số bộ nhớ vào không gian địa chỉ của chương trình của bạn.
Nếu chương trình của bạn chạy mà không có hệ điều hành, thì bạn có thể nghĩ chương trình của mình là là hệ điều hành. Bạn có quyền truy cập vào tất cả các địa chỉ, nghĩa là bạn chỉ có thể gán một địa chỉ cho một con trỏ, sau đó bỏ tham chiếu đến con trỏ đó để đọc/ghi.
Tất nhiên bạn phải chắc chắn rằng các bộ phận không khác của chương trình của bạn chỉ cần sử dụng bộ nhớ tương tự, vì vậy bạn viết riêng bộ nhớ quản lý của bạn:
Nói một cách đơn giản là bạn có thể thiết dành một dải địa chỉ mà "quản lý bộ nhớ" của bạn sử dụng để lưu trữ các dải địa chỉ đã được sử dụng (các cơ sở dữ liệu được lưu trữ trong đó có thể dễ dàng như danh sách được liên kết hoặc phức tạp hơn nhiều). Sau đó, bạn sẽ viết một hàm và gọi hàm đó, ví dụ: malloc() tạo thành phần chức năng của trình quản lý bộ nhớ của bạn. Nó nhìn vào cơ sở dữ liệu được đề cập để tìm địa chỉ của các phạm vi, miễn là đối số xác định và trả về một con trỏ tới nó.
Bây giờ, nếu mọi chức năng trong chương trình của bạn gọi hàm malloc() thay vì viết ngẫu nhiên vào địa chỉ tùy chỉnh bạn đã thực hiện bước đầu tiên. Bạn có thể viết miễn phí() - chức năng sẽ tìm con trỏ được đưa ra trong cơ sở dữ liệu đã đề cập và điều chỉnh datastructure (trong danh sách liên kết ngây thơ nó sẽ hợp nhất hai liên kết).
Nguồn
2012-02-17 20:47:33
Không trả lời câu hỏi thực: Bộ nhớ được cấp phát động ở đâu. Nó đi vào đống. Đâu là đống? Nó nằm trong một dải địa chỉ được cấu hình bởi tập lệnh trình liên kết. –
@fanl Câu hỏi của bạn khác với câu hỏi của Leo Messi. Bạn có -1 câu trả lời này không? Vui lòng hoàn tác. Nếu bạn mở câu hỏi của riêng mình, tôi sẽ cố gắng trả lời nó. –