堆内存和栈内存

 在学习C程序设计语言时,会遇到两个很相似的术语:堆内存和栈内存。这
堆内存和栈内存

  堆内存和栈内存

两个术语虽然只有一字之差,但是所表达的意义还是有差别的,堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且 自由度 大。使用栈内存就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是 自由度 小。操作系统中所说的堆内存和栈内存,在操作上有上述的特点,这里的堆内存实际上指的就是(满足堆内存性质的) 优先队列 的一种 数据结构 ,第1个元素有最高的 优先权 ;栈内存实际上就是满足先进后出的性质的数学或 数据结构

编辑本段分配

  在标准 C语言 上,使用malloc等内存分配函数获取内存即是从堆中分配 内存 ,而在一个 函数体 中例如定义一个 数组 之类的操作是从 中分配内存。从堆中分配的内存需要程序员手动释放,如果不释放,而系统 内存管理器 又不自动回收这些堆内存的话(实现这一项功能的系统很少)
动态分配堆内存

  动态分配堆内存

,那就一直被占用。如果一直申请堆内存,而不释放,内存会越来越少,很明显的结果是系统变慢或者申请不到新的堆内存。而过度的申请堆内存(可以试试在函数中申请一个1G的 数组 !),会导致堆被压爆,结果是灾难性的。
  我们掌握堆内存的权柄就是返回的 指针 ,一旦丢掉了指针,便无法在我们视野内释放它。这便是 内存泄露 。而如果在函数中申请一个 数组 ,在函数体外调用使用这块堆内存,结果将无法预测。 我们知道在c/c++ 中定义的 数组 大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,这时就要用到堆 内存分配 的概念。在堆 内存分配 时首先应该知道操作系统有一个记录空闲内存 地址 链表 ,当系统收到程序的申请时,会 遍历 链表 ,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。堆内存是向高 地址 扩展的 数据结构 ,是不连续的内存区域。这是由于系统是用 链表 来存储的空闲 内存地址 的,自然是不连续的,而链表的 遍历 方向是由低地址向高地址。堆内存的大小受限于 计算机系统 中有效的 虚拟内存 。由此可见,堆内存获得的空间比较灵活,也比较大。堆内存是由new分配的内存,一般速度比较慢,而且容易产生 内存碎片 ,不过用起来最方便.另外,在 WINDOWS 下,最好的方式是用 VirtualAlloc 分配内存,它直接在进程的 地址空间 中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。

编辑本段重要函数

  获得堆内存:malloc()
  动态分配堆内存
  原型:externvoid*malloc(unsignedintnum_bytes);
  功能:分配长度为num_bytes字节的内存块
  说明:如果分配成功则返回指向被分配内存的 指针 ,否则返回空指针NULL。当内存不再使用时,应使用 free() 函数将内存块释放。
  malloc的语法是: 指针 名=( 数据类型 *)malloc(长度),(数据类型*)表示指针.
  释放堆内存:Delete()
  原型:Delete(varS:String;Index,Count:Integer);
  功能:Delete()删除字符串S中从第Index个字符开始的Count个字符。若Index超出了S的长度,则不执行删除的操作。若Index Count超出了S的长度,则删除从Index到S末尾的字符。若Index或Count出现负数,则不执行删除的操作。
  举例:
  VarS:String='1234567890';执行Delete(S,1,3)后,S=‘4567890’;执行Delete(S,9,8888)后,S='12345678'执行Delete(S,99,2)后,S=‘1234567890’;执行Delete(S,-1,3)后,S=‘1234567890’

编辑本段申请堆内存的方式

一、malloc函数

  例:int*p;
  p=(int*)malloc(sizeof(int));
  使用malloc函数分配内存时,返回值要经过类型转换才可赋予一个 指针变量 。该函数如分配内存成功,则返回其始 地址 ,否则返回NULL。头文件为#include<stdlib.h>。

二、new运算符

  例:int*p,*q;
  p=new int;//申请分配一个int型内存空间
  p=new int(10);//申请一个int型空间存放10
  q=new int[10];//申请分配10个int型的内存空间
  new分配内存时不需要类型转换。用new申请的空间必须要用delete释放。而且 指针 值不能改变。形式有:delete 指针变量 名(可释放一个内存单元)、delete[]指针变量名(可释放若干个内存单元)。

编辑本段典型示例

  例1:
  #include"iostream"
  using namespace std;
  main()
  {
  int array_size;//元素个数
  int *array;//用于动态开辟 数组 指针变量
  cin>>array_size;
  array=(int*)malloc(array_size*sizeof(int));/*利用malloc在堆内存中开辟内存空间,它的大小是元素的个数乘以该 数据类型 的长度 */
  for(int i=0;i<array_size;i++)
  array[i]=i;//输入 数组
  for( i=0;i<array_size;i++)
  cout<<array[i]<<",";//以逗号间距输出 数组
  cout<<endl;//换行
  free(array);//利用free释放动态开辟的堆内存空间
  cin.get();//按 任意键 结束
  return 1;//返回值 
  }//VC6.0通过 网页格式符 请不要直接复制粘贴本段编译
  这里要特别注意个地方就是:array=(int*)malloc(array_size*sizeof(int));malloc()的函数原形本身是void*malloc(size_tsize),由于动态分配的空间计算机并不知道是用来做什么的所以是无类型的,但你要把它用在动态的整形 数组 上的时候就要显式的转换成int*了。
  例2:
  //malloc.c
  #include "iostream"
  using namespace std;
  main()
  {
  char *p;
  p=(char*)malloc(100*sizeof(char));
  if(p)
  printf("Memory Allocated at:%x \n",p);
  else
  printf("Not Enough Memory Available! \n");
  free(p);
  getchar();//按任意键结束
  return 0;
  }//VC6.0通过 网页格式符 请不要直接复制粘贴本段编译
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值