我不是很了解malloc,那些使用malloc创建的只是在堆上创建的吗?如何通过malloc生成的数组与不是那些不同的数组
回答
是的,当你malloc你在堆中分配。
malloc函数从堆中请求一块内存。如果请求被授予,操作系统将保留请求的请求的内存量。
如果数据的生命周期必须与分配的代码范围不同,那么您应该使用malloc。例如:你在一个函数中使用malloc,你存储/保存一个指向该分配空间的指针,然后你可以在另一个函数中使用它。
与堆栈分配相比,另一个优势是您可以检查malloc是否失败,假设您没有足够的可用内存。
附注:不要忘了free
你malloc
。
“是的,当你在malloc中分配堆时。” - 至少在使用堆实现动态内存分配系统时。它可能不是(例如在AVR微控制器上,它不是)。使用正确的措辞(“动态分配”)不会更困难时,使用不精确的,与实施细节相关的术语毫无意义。 – 2014-10-27 05:35:44
分配请求的字节大小,并返回分配的空间的指针的第一个字节
ptr=(cast-type*)malloc(byte-size)
这里,PTR是铸型的指针。 malloc()函数返回一个指向字节大小的内存区域的指针。如果空间不足,分配失败并返回NULL指针。
例
ptr=(int*)malloc(100*sizeof(int));
时,要动态分配的内存(在运行时)时使用。通常每个程序在运行时都与堆内存相关联。因此,当使用free()完成内存使用时,应该将其返回。
http://meta.stackoverflow.com/questions/273024/position-fixed-navigation-bar – Mat 2014-10-27 04:48:49
[铸造标准分配器的返回值是有害的。](http://stackoverflow.com/questions/605845/do- i-cast-of-malloc) – 2014-10-27 05:34:02
另一个区别(在其他答案中还没有提到)是由malloc()
创建的数组是匿名的 - 您有一个指向数据的指针,但没有数据的名称。
堆栈和堆中的数组在使用方面没有区别。两者都是记忆 - 它们在分配方面不同。 malloc
内部调用brk()
或sbrk()
来改变“程序中断”,即程序地址空间根据您的malloced大小要求。
当您不完全知道要分配多少内存时使用malloc。或者如果您需要重新使用内存,因为一次只使用一个或两个时,不能分配1000个大小为10的数组。然后去malloc,因为你完成后可以释放内存。
注意:永远不要尝试free()
静态分配的变量!
欢迎来到StackOverflow。但根据[Rhythm'n'Grammar](http://www.hrwiki.org/wiki/local_news#Easter_Eggs):*“我们不在乎他们如何在互联网上拼写东西,当你回答SO时,你[拼出整个单词](http://stackoverflow.com/revisions/26581453/1)。我们不关心你的手机里有一个摄像头。“*。饭桶。 :-) – HostileFork 2014-10-27 06:43:51
当然,下次还会继续。 :) – 2014-10-27 07:22:26
你的问题是“通过malloc生成的数组与通过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返回归零内存并确保返回的块适当对齐。
- 1. 组通过与在那里工作不
- 2. 如何使用不同的键将数组拆分成不同的数组或相同的数组通过检查数组值
- 3. 的malloc与多维数组
- 4. 如何通过不同的列组值
- 5. 如何准备一些值与组非常不同的数据?
- 6. 如何通过组合两个相同的数组值来生成一个唯一的数组?
- 7. 如何通过MATLAB生成由不同频率滑行段组成的声音?
- 8. SQL不同的组通过
- 9. 如何通过不同的组的发生比较在r中
- 10. 通过嵌套数组循环以生成不同长度的表格
- 11. 如果密钥相同,如何将哈希数组分成不同的数组?
- 12. 通过LINQ生成二维数组
- 13. 如何通过JSON数组迭代具有不同的头
- 14. 如何使用不同类型的对象通过mapView.annotations数组?
- 15. 如何通过JavaScript循环不同长度的数组?
- 16. 如何通过HTML表不同的行从MySQL数据库组
- 17. 这些数组类型有何不同?
- 18. 通过数组的数组
- 19. 将增加到malloc数组的值变成malloc数组中的所有值
- 20. 生成不同的回调函数数组在Javascript
- 21. 简单数组不是通过
- 22. Rails的生成与数组参数
- 23. 复制数组的值,而不是通过与JavaScript参考
- 24. 如何将关联数组与不同的键组合?
- 25. 生成随机数与我的数组值不重复
- 26. 具有不同大小的结构数组的malloc()结构
- 27. 'int'对象不可迭代,但是那些是int数组..不只是int
- 28. 如果数组的大小是偶数而不是奇数,那么数组的元素是中位数?
- 29. 如何通过数组拆分数组?
- 30. SOAP方法中的数组通过JAX-WS生成的参数?
是的,它们是在堆内存上创建的。 – user1336087 2014-10-27 04:32:32