主题:堆溢出与栈溢出的区别是什么?
			
 liukai19871216
				 [专家分:30]  发布于 2006-08-17 19:46:00							
			求助?
						
					 
		
			
回复列表 (共8个回复)
		
								
				沙发
				
					
euc [专家分:4310]  发布于 2006-08-18 11:32:00				
				什么是堆和栈?
如果你学过汇编的话应该知道,栈大小是在exe文件中就定好了的,是固定的.栈仅用来在调用函数时保存参数值.
堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. 想要从堆中挖到一块内存来用需要操作系统的帮助. new,malloc()都是在堆中分配内存,但是堆分配是很慢的. 有几个原因,os需要维护一个链表,而且同一时刻只能有一个线程操作堆...
参考:
http://www.chinaunix.net/jh/23/477573.html
http://www.chinaitpower.com/A/2004-03-31/159398.html
							 
						
				板凳
				
					
rickone [专家分:15390]  发布于 2006-08-18 14:11:00				
				[quote]堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. [/quote]
想要多大就有多大,我不同意啊,我的置换表开个几MB出来都失败了,我也不知道具体原因,它就是返回了0,我打算用文件缓冲~
							 
						
				3 楼
				
					
euc [专家分:4310]  发布于 2006-08-18 17:51:00				
				那可能是因为内存碎片的原因,如果一次得不到足够的内存,可以多分配几次.
							 
						
				4 楼
				
					
rickone [专家分:15390]  发布于 2006-08-19 14:10:00				
				我也这么想,可能还跟操作系统有关吧,不知道他怎么回收的,如果没有连续的空闲空间就失败了,我想可以先建一个文件,然后做内存映象,会不会跟在内存中一样快呢?反正现在的虚存技术对程序员是透明的,或许是一样快的。
							 
						
				5 楼
				
					
euc [专家分:4310]  发布于 2006-08-19 19:26:00				
				怎么可能透明?
							 
						
				6 楼
				
					
mantiser [专家分:300]  发布于 2006-08-21 23:10:00				
				堆和栈往往在一片内存块内,分配堆内存是从低地址往高地址扩展,栈内存是从高地址往低地址扩展(两端向中间靠近,由于这块内存很大,很少出现碰头现象)
							 
						
				7 楼
				
					
woshichounanwopa [专家分:320]  发布于 2006-08-22 16:59:00				
				我用的数据结构教材上没有讲堆,就只是讲了堆排序。是 胡学刚 写的是不是不好?
							 
						
				8 楼
				
					
InitInstance [专家分:8720]  发布于 2006-08-28 11:22:00				
				堆排序跟堆栈的堆是两码事
							 
									
			
我来回复