什么是堆栈?为什么 malloc 可以防止堆栈溢出?

发布于 2024-12-08 16:40:20 字数 381 浏览 1 评论 0原文

可能的重复:
堆栈和堆是什么以及在哪里

我是新手C语言,我日常使用大多使用Python,所以对这些概念不是很熟悉。我在这里问的上一个问题: 大数组在 C 中给出分段错误 让我想到了这个问题。那么,什么是栈,malloc和它有什么关系呢?

Possible Duplicate:
What and where are the stack and heap

I am new in C language, I mostly use Python for daily usage, so I am not very familiar with these concept. The previous question I asked here: Big array gives segmentation error in C leaded me to this question. So, what is a stack, and what the relation of malloc to it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风向决定发型 2024-12-15 16:40:23

在此处阅读有关堆栈和堆的信息: http://ee .hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html

malloc 从堆而不是堆栈分配内存(阅读有关堆栈和堆的信息)。这就是为什么它可以防止堆栈溢出:)。当您声明一个 long long 类型的数组时,它会分配给它固定的大小,并且从堆栈中获取内存。但是 malloc 会根据您的要求(即需要在数组中存储的元素数量)动态分配大小。

PS:在Python中,内存分配是为你处理的。作为一名程序员,你被宠坏了:D。 C 更接近系统,因此您必须拥有相当多的系统知识才能更好地理解 C 的工作原理。

Read about stack and heap here: http://ee.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html .

malloc allocates memory from the heap and not the stack (Read about stack and heap). That is why it prevents the stack from overflowing :) . When you declare an array of long long type, it has a fixed size allocated to it and that memory is taken from the stack.But malloc allocates size dynamically based on your requirement (ie number of elements required to be stored in the array).

PS: In python memory allocations are taken care for you. You are pampered as a programmer :D . C is closer to the system and so you must have a fair amount of system knowledge to understand the working of C better.

小糖芽 2024-12-15 16:40:23

malloc 在堆上分配空间,而不是在堆栈上分配空间。

堆栈是用于每个函数的局部变量和参数的空间。

换句话说,每个函数都使用堆栈来存储局部变量。 Malloc 使用堆上的内存,这是完全不同的。

malloc allocates space on the heap, not on the stack.

The stack is the space used for the local variables and parameters for each function.

In other words, every function uses the stack for local variables. Malloc uses memory on the heap which is completely different.

但可醉心 2024-12-15 16:40:23

wiki 对 call_stack 有很好的解释。

malloc帮助您从系统申请内存,该内存在上分配。

wiki has a nice explanation for call_stack.

malloc help you to apply for memory from the system, which allocates on heap.

笨笨の傻瓜 2024-12-15 16:40:23

malloc 不会防止堆栈溢出。不过度使用堆栈可以防止堆栈溢出。当然,如果您想避免过多的堆栈使用,您可能需要其他地方来存储您的工作数据,这就是 malloc 的用武之地......

malloc does not prevent the stack from overflowing. Not using the stack excessively is what prevents it from overflowing. Of course if you want to avoid excessive stack usage, it's likely you'll need somewhere else to store your working data, and that's where malloc comes in...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文