游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: hellnight

堆栈是一中数据结构还是两种?堆内存和栈内存是在什么

[复制链接]

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-12-3 17:19:00 | 显示全部楼层

Re:堆栈是一中数据结构还是两种?堆内存和栈内存是在什


堆和栈是完全不同的概念,是两种完全不同的结构。

至于为什么会产生混淆呢,主要是我们常常将堆栈连起来说,可能因为他们都有一个共同的性质,那就是动态分配的空间。

一般教科书说堆栈,其实指的是栈。

他们有很大的不同,栈主要用于函数存放函数里面变量的一块内存,这块内存是固定大小的,编译的时候就决定了的,一般为2m左右。 你可以将栈看作一个巨大的数组,只是由编译器隐式生成的,它是所有函数公用的。为何说是动态的呢,主要是函数只有运行的时候,才从这块区域申请空间,如一个int就申请4个字节。因此,使用函数,就要注意以下函数里面,不要定义太大的变量,比如一个巨大结构,还有就是函数调用函数的层数不要太多,也就是小心那些自己调用自己的函数,往往生成太多的栈变量。当函数退出,他就释放掉他申请的空间。因此也不要返回函数内部变量的地址。

而堆是一个系统调用函数申请的新内存,由另一些函数负责释放。他是完全有程序员人工操作的内存空间,并且大小只需小于可用内存空间便可。

c++通过关键字new申请相当于对象大小的堆空间,并且进行初始化。



248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-12-3 17:26:00 | 显示全部楼层

Re:堆栈是一中数据结构还是两种?堆内存和栈内存是在什


队和栈是两种数据结构,你可以自己实现。不过系统实现这两种结构,用于内存管理上,一般程序员可以当他们是透明的。也就是说,程序开发不了解队和栈的实现方式也没关系,只要知道怎样使用就够了(甚至使用了不知道也可以)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 20:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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