程序内存空间

 
 程序内存空间

 代码区..............
(code area)

 全局数
 据区................
(data area)

 堆区................
(heap area)

 栈区................
(stack area)

一个程序将操作系统分配给其运行的内存块分为4个区域:

1。代码区:存放程序的代码,即程序中的各个函数代码块。

2。全局数据区:存放程序的全局数据和静态数据。

3。堆区:存放程序的动态数据。

4。栈区:存放程序的局部数据,即各个函数中的数据。

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

栈是一种数据结构,它的工作原理就象在子弹匣中压子弹一样,最先压入的子弹要等到最后才飞射出去,而最后压入的子弹则首先飞射出去

c++的函数调用过程,需要调用初始化和善后处理的环节。函数调用的整个过程就是栈空间操作的过程。函数调用时,首先:
1。建立被调函数的栈空间。
2。保护调用函数的运行状态和返回地址。
3。传递参数。
4。将控制转交被调函数。

 函数的栈操作原理是一致的,但具体的实现因编译器的不同而不同。

注意:栈是有限的资源,每次调用一个函数,所建立的的栈空间都比上一个函数的栈空间要小。可以看出,如果一层层调用下去,或者
过多的定义局部变量特别是数组,最后可能导致栈空间枯竭而引起程序运行出错。如果程序确实要占用相当大的栈空间,可以在连接前
通过设置栈空间大小来改善。

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

1。堆内存:
 堆(heap)是内存空间。
 堆,允许程序在运行时(而不是在编译时)申请某个大小的内存空间。

 程序在编译和连接时不予确定这种在运行中获取的内存空间,这种内存
 环境随着程序运行的进展而时大时小,这种内存就是堆内存,所以堆内
 存是动态的。
 堆内存也称 动态内存。

2。获得堆内存:
 函数malloc()是c程序获得堆内存的一种方法,它在alloc.h头文件中声明。
 malloc()函数的原型为:
  void * malloc(size_t size);
  size_t 即 unsigned long

 该函数从堆内存中“切下”一块 size 大小的内存,将指向该内存的地址返回。
 该内存中的内容是未知的。

 注意!程序中并不能保证一定可以从堆中获得所需要的内存。有时,系统所能
 提供的堆空间不够分配,这时系统会返回一个空指针值NULL。这时,所有对该
 指针的访问都是破坏性的,因此,调用malloc()函数应该如下:

 if(array = (int *)malloc(arraysize*sizeof(int))==NULL)
 {
    cout<<"can't allocate more memory, terminating. /n";
    exit(1);
 }
3。释放堆内存:
 函数free()返还由malloc()函数分配的堆内存。
 void free(void *);
 
4。new与delete:
 new 和 delete 是 c++ 专有的操作符,它们不用头文件声明。new类似于函数malloc(),
 分配堆内存,但是比malloc()更简练。new的操作数为数据类型,它可以带初始化值表或
 单元个数。new返回一个具有操作数之数据类型的指针。
 
 delete函数,当返回的是new分配的数组时,应该带[],即 delete[]array

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值