C语言堆和栈的区别用比喻,举例子说明?

2025-02-06 09:06:31
推荐回答(5个)
回答1:

堆和栈的区别可以引用一位前辈的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。比喻很形象,说的很通俗易懂,不知道你是否有点收获。

回答2:

堆空间由程序员分配释放,栈由编译器自动分配释放

回答3:

一般普通的变量放在栈中,变量的作用域结束了,那么变量在栈中占用的内存也释放了,用malloc开辟的空间放在堆中,如果不用free去释放,那么开辟的空间一直战胜堆的内存空间
比如:
int a;变量a的占用的是栈的内存空间
int *p =(int *) malloc(sizeof(int));p指向的内存占用的是堆中的内存,不用free去释放,这个地址中的内存的值一直会存在

回答4:

堆就像图书馆里的书籍一样可以放到任何一个书架上任何的位置,
栈就像炉子放煤一样,从哪方的就必须从哪出

回答5:

堆是由用户来分配的,用malloc申请,相应的用free来释放。

栈是系统自动分配的,子程序调用时,返回地址压入栈,退出时从栈顶取返回地址。如果在子程序中定义局部变量,这些变量就分配在栈上,用来了,子程序退出的时候退栈,局部变量就失效。

void sub(void )
{
int a[100]; // 局部变量,分配在栈上,退出子程序自动释放。
int *p = (int *)malloc( 100 ); // 分配在堆上,需要用free释放。
。。。
}