calloc 实现_自实现malloc_malloc实现细节

电脑杂谈  发布时间:2017-03-02 20:13:38  来源:网络整理

malloc实现细节_自实现malloc_calloc 实现

很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的。但是但是:

一部分人还是将:malloc当作系统所提供的或者是C的关键字,事实上:malloc只是C标准库中提供的一个普通函数

而且很多很都对malloc的具体实现机制不是很了解。

1,关于malloc以及相关的几个函数

#include <stdlib.h>(Linux下)

void *malloc(size_t size);

void free(void *ptr);

void *calloc(size_t nmemb, size_t size);

void *realloc(void *ptr, size_t size);

也可以这样认为(window下)原型:extern void *malloc(unsigned int num_bytes);

头文件:#include <malloc.h>或者#include <alloc.h>两者的内容是完全一样的。

如果分配成功:则返回指向被分配内存空间的指针

不然,返回空指针NULL。

同时,当内存不再使用的时候,应使用free()函数将内存块释放掉。

关于:void *,表示未确定类型的指针。C,C规定,void *类型可以强转为任何其他类型的的指针。

mallocreturns a void pointer to the allocated space, orNULLif there is insufficient memory available. To return a pointer to a type other thanvoid, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0,mallocallocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return frommalloc, even if the amount of memory requested is small.

关于void *的其他说法:

void * p1;

int *p2;

p1 = p2; 就是说其他任意类型都可以直接赋给它,无需进行强转,但是反过来不可以。

malloc:

malloc分配的内存大小至少为size参数所指定的字节数

malloc的返回是一个指针,指向一段可用内存的起始地址

多次调用malloc所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉

malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)

实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)

malloc和free函数是配对的,如果申请后不释放就是内存泄露;如果无故释放那就是什么都没有做,释放只能释放一次,如果释放两次及两次以上会出现错误(但是释放空指针例外,释放空指针其实也等于什么都没有做,所以,释放多少次都是可以的)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-35441-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 李沇
      李沇

      欢迎提出宝贵意见

    • 徐基
      徐基

      不想你变的憔悴”感触良多

    • 高桥美佳子
      高桥美佳子

      企业大了就是好啊

    热点图片
    拼命载入中...