游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6411|回复: 18

请问有谁知道堆和栈的区别???

[复制链接]

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2003-12-11 21:01:00 | 显示全部楼层 |阅读模式
比如说,如果我申请数组,直接用
int Array[262144];
然后把数组都填上数,编译通过,但是运行时会非法操作,但是如果:
int * Array=new int[8388608];
就可以……

有资料说int * Array=new int[8388608];是在堆中分配内存,但是直接声明数组,是在栈中,但是栈的资源很紧张……

可我就不明白了,堆内存要是用汇编语言该怎么表达呢?堆和栈是什么关系呢?

1

主题

37

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2003-12-11 21:27:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

栈是程序执行的空间。程序执行完后就会消失,这个实际上是程序的各个执行。栈的大小由程序的执行来确定的。
因为程序的执行无非就是指令在CPU上的执行与否。还有就是当前CPU状态的保存,所以栈来实现这一功能。

堆是可以由程序员自己来指定的那个内存块。但程序不自动管理。所以这里容易出现Memory Leak.

当你定了局部变量时,其它的程序或函数对其进行访问就可能出现Access Violatioin!!!!

栈并没有紧张与否的说法。。
栈的存在是程序的执行正确的保证。可以说没有了栈。程序也就无法执行了。因为很多的变量是由局部的,它们都保存在栈中。

如果要在汇编中表达出堆是不可能的。
如果说可以表达,那也只是一个系统调用而已,说白了,就是一个
CALL语句。对应该OS中分配内存的函数名。

堆与栈的区别是管理它们的直接对象不同。
呵呵

11

主题

274

帖子

669

积分

高级会员

Rank: 4

积分
669
发表于 2003-12-12 12:44:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

栈是存放指令的,堆是存放数据的

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-12 21:19:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

谢了谢了,要是能打分,一定给满分!!

1

主题

37

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2003-12-13 01:11:00 | 显示全部楼层

Re: Re:请问有谁知道堆和栈的区别???

simplyer: Re:请问有谁知道堆和栈的区别???

栈是存放指令的,堆是存放数据的


Sorry。怪我讲得不是很明确。
栈显然也是放数据的,指令与数据一般是分开的。
所以指令是不可能放在栈里的。 栈与堆都是存放数据的。当然这个数据包含的内容很广泛的。只是栈的数据是操作系统控制级的。堆是程序员级的。呵呵。
图示为:

[.......      ]           [....]          [.....]
  程序代码             栈              堆
随着程序的执行,栈是不断根据代码的执行变化着的。堆的变化主要是程序是使用了程序员级的内存操作引起的。

相信这样应该是比较明确了。

水平有限。错误难免,请各们高人指点

6

主题

74

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2003-12-15 17:40:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

栈是有空间限制得vc6编译时默认栈大小为1M。上面那个数组太大了

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-15 20:03:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

这个还大???
当时开的是含8个int的struct,开个数组1048576格,一共32MB

0

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2003-12-18 00:50:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

堆是heap,堆栈是stack,栈是什么?

0

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2003-12-18 01:33:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

是不是存放一个函数局部变量的那块内存叫栈?

4

主题

29

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2003-12-18 09:02:00 | 显示全部楼层

Re:请问有谁知道堆和栈的区别???

二楼的对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 21:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表