首页 > 编程知识 正文

c语言malloc函数的功能及用法,malloc函数在c语言第几页

时间:2023-05-05 20:58:26 阅读:34898 作者:1804

malloc函数是分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size字节的内存空间。 malloc的全名是内存分配,如果不知道内存的具体位置,则需要动态内存分配才能绑定真正的内存空间。 返回类型为void*类型。 void*表示未确定类型的指针。 c,c规定void*类型可以通过类型转换强制转换为其他类型的指针。

1、函数原型和说明void*malloc(longNumBytes ) :这个函数分配了numbytes字节,并返回了指向这个内存的指针。 如果分配失败,则返回空指针。 分配失败的原因应该有很多种。 例如,空间不足是一个。

voidfree(void*firstbyte ) :此函数将以前在malloc中分配的空间返回给程序或操作系统,也就是说释放此内存,以便重新获得自由。

2、在说明函数的使用方法之前,#includestdlib.h或#includemalloc.h

如果您从未直接或间接在source code中包含stdlib.h,gcc将报告错误:“malloc’wasnotdeclaredinthisscope”。

其实使用这两个函数并不是很难。 也就是说,在malloc () )之后觉得足够了就摇它给free ) )。 举个简单的例子:

//代码.

char *Ptr=NULL;

ptr=(char* ) malloc ) 100 * sizeof (char );

if (空值==ptr ) )。

{

退出(1;

}

gets(ptr );

//代码.

自由(ptr );

Ptr=NULL;

//代码.

是的! 当然,具体情况要具体分析,具体解决。 例如,如果定义了向一个函数申请内存并在函数返回中传递给该指针的指针,则释放内存的任务可能应该保留在其他函数中。

3、malloc函数区别于new函数,new返回指定类型的指针,可以自动计算所需的大小。

int *p; p=new int; //返回类型为int *类型,分配大小为sizeof(int ) p=newint ) 100 ); //返回类型为int *型,分配大小为sizeof(int ) 100,malloc必须计算我们的字节数,并在返回时强烈转换为实际指定类型的指针。

int *p; p=(int* ) malloc ) sizeof (int ); free(p ); malloc的返回是void *,写p=malloc(sizeof(int ) )时,是间接说明的(把void *变换为int *是不合理的)。 malloc的实际参考是sizeof(int ),表示整形数据所需的大小。 p=) int* ) malloc )1),malloc只需申请一个字节的空间,如果其中存储整数,就会占用额外的3字节,malloc只需分配内存即可,知道原始内存空间的数据可能会发生变化一般意义上,我们习惯性地将其初始化为NULL。 当然,也可以使用memset函数。 简单来说,malloc函数其实在内存中。 查找指定大小的空间,并将该空间的起始地址传递给指针变量。 这里的指针变量可以是单独的指针,也可以是数组的起始地址,这取决于malloc函数参数size的具体内容。 这里,malloc分配的存储器空间在逻辑上连续,但也可以是物理上不连续的。 作为程序员,我们关注逻辑上的连续性。 其他的,由操作系统处理。

4、其他关于这个函数的原型,以前malloc会返回char型指针,但是在新的ANSIC标准中,这个函数会返回void型指针,所以根据需要进行类型转换。

如果分配成功,则返回指向分配内存的指针。 这个商店的初始值还不确定。 否则,返回空指针。 如果内存不再使用,则必须使用free ()函数释放内存块。 函数返回的指针必须适当对齐,以便可以在任何数据对象上使用。

5、malloc机制malloc函数的本质是具有所谓的空闲链表,在该空闲链表中,可用的存储器块被连接到长列表。 调用malloc函数时,它会沿着连接表查找大小足以满足用户要求的内存块。 接着,将该存储器块分割为两个。 一个块的大小等于用户请求的大小,另一个块的大小是其馀字节。 然后,将分配给用户的内存传递给用户,并返回连接表(如果有剩下的内存)。

调用free函数将用户释放的内存块连接到空闲链。 最后,空闲链被切割成许多小内存片段。 此时,如果用户申请较大的内存片段,则空闲链可能没有满足用户要求的片段。 因此,malloc函数要求等待时间,开始在空链上翻箱倒柜地检查每个内存段,整理它们,并将相邻的小空块合并成大内存块。 如果得不到满足要求的内存块,则malloc函数将返回空指针,因此在调用malloc动态请求内存块时,请确定要返回的值。 Linux Libc6采用了一种在free时将相邻片段合并到较大的free空间中的机制。

参考资料

[1] https://blog.csdn.net/CHF _1/article/details/78688557

[2] https://www.cn blogs.com/commence/p/5785912.html,这写得很详细

[3] https://www.cn blogs.com/Shiwei happy/p/4246372.html

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