游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2431|回复: 6

有关从堆和堆栈上创建对象的区别?WXH ZT

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-1-24 23:52:00 | 显示全部楼层 |阅读模式

(wangxin_china发表于2005-1-24 0:31:48)

一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap)—— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

4、文字常量区  — 常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区 — 存放函数体的二进制代码。

6、例子程序,这是一个前辈写的,非常详细:
//main.cpp
#include "stdlib.h"
#include "stdio.h"
int a = 0; //全局初始化区
char *p1; //全局未初始化区
void main()
{
    int b; //栈
    char s[] = "abc";//栈
    char *p2; //栈
    char *p3 = "123456"; //123456在常量区,p3在栈上。
    static int c =0; //全局(静态)初始化区
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);
    //分配得来得10和20字节的区域就在堆区。

    //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
    strcpy(p1, "123456");  
}

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2005-1-25 23:42:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

int i = 12;
i = 34;

这个还没有讲。
是否在代码区?

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-1-26 10:50:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

递归实现返回地址起了决定性作用~而返回地址是压在栈上的:

--函数参数n----
--参数n-1-----
...
--参数1--
--返回地址--
--临时变量--

刚进入函数的时候esp指向的就是返回地址(似乎是,没记错的话)

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2005-1-26 20:23:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

stack天生是用来实现递归的…………

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-1-26 20:54:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

....偶3楼的帖子是粘贴的我原来一篇关于堆栈的回帖......所以看起来是废话了...

37

主题

727

帖子

740

积分

高级会员

Rank: 4

积分
740
发表于 2005-1-26 21:02:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

你老是在后面加"(似乎是,没记错的话)"这类话
哈浮躁
BS一下

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-26 21:15:00 | 显示全部楼层

Re:有关从堆和堆栈上创建对象的区别?WXH ZT

wxhwhmanshan哥一直在这里发技术帖

WXH ZT是标志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 04:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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