首页 > 编程知识 正文

malloc需要什么头文件,malloc底层原理

时间:2023-05-05 02:07:51 阅读:125059 作者:423

函数原型: void * malloc (unsigned intnum _ bytes ); //分配长度为num_bytes字节的存储器块

返回值是void指针。 void*表示未确定类型的指针,void*可以指向任何类型的数据。 更明确地说,这意味着在请求内存空间时,用户不知道使用此区域存储的是什么类型的数据,并且可以根据类型强制转换为任何其他类型的指针,如char、int或其他数据类型。 如果分配成功,则返回指向分配内存的指针。 这个商店的初始值还不确定。 否则,返回空指针。

为什么? 什么时候?

malloc ) )是动态内存分配函数,请求系统分配内存空间。 如果不知道内存的具体位置,并且想要绑定真正的内存区域,请使用malloc ()函数。 malloc只能分配内存空间,不能初始化分配的空间,因此申请的内存值是随机的,经常在使用memset ()操作为0之后使用。

和那个配套的是free ()。 申请的空间不再使用时(free ) )函数释放内存空间,可以提高资源的利用率。 最重要的是----正因为可以申请和按需释放内存空间,所以称为“动态内存分配”。  

malloc ) )函数本质上具有将可用内存块连接到长列表中的链表。 该链表是所谓的空闲链表。 malloc ) )函数时,它沿着连接表找到大小足以满足用户请求的连续内存块,并将其划分为大小与用户请求的内存大小相同的内存块和其余内存块。 然后,将用户申请的块传递给用户,并返回到连接表(如果有其他块)。  

free ) )调用函数,将用户希望释放的内存块链接到空闲链。 最后一个空闲链链接的内存空间的小块。 如果用户这申请分配较大的存储器空间,则空闲链可能没有符合用户要求的存储器块。 此时,malloc ) )函数要求延迟,考虑在空闲链上检查并整理各个存储器块,开始将相邻的小存储器块合并到大存储器块中。 如果无法获得满足要求的内存空间(malloc ) )函数返回NULL。 因此,malloc ) )调用函数时,请确保确定其返回值是否为NULL。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。