Malloc和Void Pointers

mor*_*llo 6 c malloc void-pointers

我正在研究这个malloc函数,我可以使用一些帮助:

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;
 }
Run Code Online (Sandbox Code Playgroud)

我知道malloc func为任何类型分配内存空间,如果有足够的内存,但我不理解的行是:

p = (void *)malloc_ptr;
malloc_ptr += size;
Run Code Online (Sandbox Code Playgroud)

它如何指向任何类似的数据类型?我只是无法理解void指针或其位置.

注意:malloc_ptr是unsigned long

squ*_*guy 6

它返回一个void指针的原因是因为它不知道你在malloc调用中分配了什么空间.它只知道你要求的空间量.由您或您的编译器决定将填充内存的内容.void指针的位置通常被实现为链接列表以保持完整性并且知道哪些内存值是空闲的,这在free功能中令人惊讶地保持跟踪.