| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1021 人关注过本帖
标题:堆内存和栈内存各有什么作用?
只看楼主 加入收藏
明天不一样
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-8-31
收藏
 问题点数:0 回复次数:10 
堆内存和栈内存各有什么作用?
我的问题是堆内存和栈内存各有什么作用?什么变量在堆内存里存放,什么变量在栈内存里存放,各有什么好处?谢谢!
搜索更多相关主题的帖子: 内存 
2007-05-09 09:07
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
不会.同问

2007-05-09 09:30
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
收藏
得分:0 

同问,偶也不懂

2007-05-09 11:53
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

一般认为在c中分为这几个存储区
1栈 - 有编译器自动分配释放
2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静
态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
- 程序结束释放
4另外还有一个专门放常量的地方。 - 程序结束释放
在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc,new等分配内存的函数分
配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪

里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,
不能extern到别的文件用,在函数体内定义的static表示只在该函数体内有效。
另外, 函数中的"adgfdf"这样的字符串存放在常量区。
比如: int a = 0; 全局初始化区
char *p1; 全局未初始化区
main() { int b; 栈
char s[] = "abc";栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"12345
6"优化成一块。
}
还有就是函数调用时会在栈上有一系列的保留现场及传递参数的操作。
栈的空间大小有限定,vc的缺省是2M。栈不够用的情况一般是程序中分

配了大量数组和 递归函数层次太深。有一点必须知道,当一个函数调
用完返回后它会释放该函数中所有的栈空间。栈是由编译器自动管理的

,不用你操心。 堆是动态分配内存的,并且你可以分配使用很大的内存。
但是用不好会产生内存泄漏。 并且频繁地malloc和free会产生内存

碎片(有点类似磁盘碎片),因为c分配动态内存时 是寻找匹配的内存的。
而用栈则不会产生碎片。 在栈上存取数据比通过指针在堆上存取数

据快些。 一般大家说的堆栈和栈是一样的,就是栈(stack),
而说堆时才是堆heap. 栈是先入后出的,一般是由高地址向低地址生长。


雁无留踪之意,水无取影之心
2007-05-09 12:04
caoshangfei
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-5-3
收藏
得分:0 

同意以上说法,一般来说字符串的动态存放用到堆,而递归函数的调用,再保留母函数的地址及现场信息时要用到栈,在调用子函数响应中断时用的是队列

2007-05-09 20:27
taojingwen
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-5
收藏
得分:0 
收获!

I Believe I Can Fly
2007-05-09 23:38
ruomeichen
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-25
收藏
得分:0 
2007-05-14 21:44
ibiancheng
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-4-3
收藏
得分:0 

又长知识了.谢谢4楼版主...


执著的信念,坚定的自信,勤奋的努力才是通向成功的捷径! !!
2007-05-17 20:10
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
收藏
得分:0 

我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2007-05-17 22:54
ml342418175
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2007-4-13
收藏
得分:0 

做人要洒脱一点,潇洒一点!
2007-05-17 22:56
快速回复:堆内存和栈内存各有什么作用?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012241 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved