当前位置:首页 > 内存 > 正文

什么时候用malloc申请内存

  • 内存
  • 2024-06-01 11:56:26
  • 9634

一、c语言什么时候向系统要内存空间?怎么表示?有几种情况
1程序即将启动时,预编译阶段,发现全局或静态变量。
2当您输入函数并定义局部变量时。
3当程序员动态申请内存时。
4当容器类型自行增长时。
也许就是这些情况。程序员唯一需要关心的是动态分配内存并手动释放它。
二、C语言指针什么情况下需要用形如(int*)malloc(n*sizeof(int))这样的语句申请内存空间?不申请内存可以吗你好,malloc()函数用于分配指定字节数的空间。
sizeof()查找一元运算对应类型所占用的字节数。
(类型名)是一元运算,是强制类型转换。请注意,
malloce函数申请的空间是无类型空间,必须强制转换为相应指针可以指向的空间类型。
由于这里定义了int*p,所以p指针只能指向int类型的空间。
sizeof(int)查找int类型占用的字节数。
malloc(sizeof(int))适用于int占用的相同大小的空间。
(int*)malloc(sizeof(int))将申请的空间地址转换为int类型的空间地址。
最后,可以赋值给一个指向int类型空间的p指针。
定义一个指针并为其分配n个int内存区域。当然,malloc也可以返回null。


三、malloc函数的用法

malloc函数与free函数一起使用。

malloc的全称是内存分配,中文称为动态内存分配,用于申请指定大小的连续内存块区域,并将分配的内存区域地址返回为void。.*类别。如果不知道内存的具体位置,就必须动态分配内存来绑定实际的内存空间,分配的大小就是程序需要的大小。

它的作用是在内存的动态存储区域中分配一块长度为size的连续空间。该函数的返回值是分配区域的起始地址。,这个函数是一个指针函数。返回的指针指向分配的开始。

如果分配成功,则返回指向已分配内存的指针(该存储区域的初始值不确定),否则返回空指针NULL。当不再使用内存时,必须使用free()函数释放内存块。从函数返回的指针必须正确对齐才能与任何数据对象一起使用。

运行机制

malloc函数的本质在于它有一个所谓的空闲链表,将空闲内存块链接成一个长链表。功能。当malloc函数被调用时,它会沿着链表寻找足够大的内存块来满足用户的请求。然后内存块被分成两块(一个块是用户请求的大小,另一块是剩余的字节)。

接下来,我们将分配给用户的内存块传递给用户,并将剩余块(如果有)返回到链接表。当调用free函数时,它将用户释放的内存块连接到free链上。最终,空闲链将被切割成许多小的内存段。此时,如果用户申请了较大的内存段,则空闲链上可能没有能够满足用户要求的段。

因此,malloc函数请求延迟,并开始翻查空闲链中的内存片段,修剪它们,并将相邻的小空闲块合并为较大的内存块。如果无法获得满足要求的内存块,则malloc函数返回NULL指针,因此调用malloc动态适配内存块时必须判断返回值。

参考上文:—malloc函数