我不太了解malloc,那些是在堆上创建的malloc创建的吗?
答案 0 :(得分:3)
当你在malloc中分配时,是的。
malloc函数从堆中请求一块内存。如果请求被授予,操作系统将保留您要求的请求的内存量。
如果数据的生命周期必须与分配它的代码范围不同,则应使用malloc。例如:你在一个函数中使用malloc,你存储/保持指向该分配空间的指针,然后你可以在另一个函数中使用它。
与堆栈分配相比,另一个优点是,当我们说你没有足够的可用内存时,你可以检查malloc是否失败。
附注:不要忘记free
你malloc
的内容。
答案 1 :(得分:2)
另一个区别(在其他答案中尚未提及)是由malloc()
创建的数组是匿名的 - 您有一个指向数据的指针,但没有数据的名称。
答案 2 :(得分:2)
堆栈和堆中的数组在使用方面没有区别。两者都是记忆 - 它们在分配方面有所不同。 malloc
在内部调用brk()
或sbrk()
来修改“程序中断”,即根据您的malloced大小要求修改程序地址空间。
如果您不确切知道要分配多少内存,请使用malloc。或者,如果您需要重用内存,因为当一次只使用一个或两个时,您不能经常分配1000个大小为10的数组。然后去malloc,因为你可以在完成后释放内存。
注意:不要尝试free()
静态分配变量!
答案 3 :(得分:0)
分配请求的字节大小并返回分配空间的指针第一个字节
ptr=(cast-type*)malloc(byte-size)
这里,ptr是cast-type的指针。 malloc()函数返回一个指向内存区域的指针,其大小为字节大小。如果空间不足,分配将失败并返回NULL指针。
实施例
ptr=(int*)malloc(100*sizeof(int));
当您想要动态分配内存时(在运行时),可以使用它。通常,每个程序在运行时都与堆内存相关联。因此,当使用free()完成使用内存时,你应该将它返回。
答案 4 :(得分:0)
您的问题是"通过malloc生成的数组与不生成的数组有何不同?"
答案:就C语言而言,没有区别。 C采用数组地址并相对于它进行索引,因此如果数组是在堆上分配或静态声明则无关紧要。
int a[10];
int *aa;
int *b;
b= a;
b[3]= 4;
aa= calloc(10, sizeof(int));
b= aa;
b[3]= 4;
注意:malloc返回非归零内存; calloc返回归零的内存并且随后返回的块被适当地对齐。