我是C语言的新手,我主要使用Python进行日常使用,所以我对这些概念不是很熟悉。我在此问过的上一个问题:Big array gives segmentation error in C引导我回答这个问题。那么,什么是堆栈,以及malloc与它的关系是什么?
答案 0 :(得分:1)
在此处阅读堆栈和堆:http://ee.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html。
malloc从堆而不是堆栈分配内存(读取堆栈和堆)。这就是为什么它可以防止堆栈溢出:)。当声明long long类型的数组时,它具有分配给它的固定大小,并且该内存是从堆栈中获取的。但malloc根据您的要求(即需要存储在数组中的元素数量)动态分配大小。
PS:在python内存分配是照顾你的。作为一名程序员,你很受宠若惊:D。 C更接近系统,因此您必须拥有相当多的系统知识才能更好地理解C的工作。
答案 1 :(得分:0)
malloc在堆上分配空间,而不是在堆栈上。
堆栈是用于每个函数的局部变量和参数的空间。
换句话说,每个函数都使用堆栈作为局部变量。 Malloc使用堆上的内存完全不同。
答案 2 :(得分:0)
wiki对call_stack有一个很好的解释。
malloc
帮助您从系统申请内存,该内存分配在heap
上。
答案 3 :(得分:0)
malloc
不会阻止堆栈溢出。不过度使用堆栈是防止它溢出的原因。当然,如果你想避免过多的堆栈使用,你可能需要在其他地方存储你的工作数据,这就是malloc
所在的地方......