Tôi đang nghiên cứu chức năng malloc này và tôi có thể sử dụng một số giúp đỡ:Malloc và Void Pointers
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
Tôi biết rằng malloc func giao đất không gian bộ nhớ cho bất kỳ loại, nếu có đủ bộ nhớ, nhưng các dòng tôi không hiểu là:
p = (void *)malloc_ptr;
malloc_ptr += size;
Làm cách nào nó có thể trỏ đến bất kỳ loại dữ liệu nào như vậy? Tôi chỉ không thể hiểu được con trỏ void đó hoặc vị trí của nó.
LƯU Ý: malloc_ptr là một unsigned long
Mã này chứa các giả định rằng một con trỏ cho 'long' unsigned (tức là 'malloc_ptr') có thể cũng chỉ cho bất kỳ đối tượng nào khác, từ một điểm liên kết. Giả định này không phải lúc nào cũng đúng (ví dụ, trên một số hệ thống, nó có thể không có khả năng trỏ đến các đối tượng 'long double'). –
Mã giả định rằng không có loại nào có yêu cầu căn chỉnh chặt chẽ hơn so với căn chỉnh 4 byte. Mã không hiển thị cách 'free_mem_ptr' và' free_mem_end_ptr' được khởi tạo. Nó không trả về NULL khi không còn chỗ trống. Nếu hàm 'error()' trả về, thì tất cả các địa ngục sẽ bị mất. –