什么是堆栈,为什么malloc会阻止它溢出?

时间:2011-10-06 18:58:24

标签: c malloc free stack-overflow

  

可能重复:
  What and where are the stack and heap

我是C语言的新手,我主要使用Python进行日常使用,所以我对这些概念不是很熟悉。我在此问过的上一个问题:Big array gives segmentation error in C引导我回答这个问题。那么,什么是堆栈,以及malloc与它的关系是什么?

4 个答案:

答案 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所在的地方......