找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6335|回复: 0
收起左侧

什么是“堆”和“栈”? 动态内存分配?

[复制链接]
ID:91442 发表于 2015-10-29 15:33 | 显示全部楼层 |阅读模式
文章目录:
解析uc/os-ii操作系统之-写在前面:http://www.51hei.com/bbs/dpj-39350-1.html
解析uc/os-ii操作系统--之创建一个单向链表:http://www.51hei.com/bbs/dpj-39833-1.html
单向链表之--添加结点的程序详解:http://www.51hei.com/bbs/dpj-39834-1.html
什么是“堆”和“栈”? 动态内存分配? :http://www.51hei.com/bbs/dpj-39835-1.html
C语言函数指针,函数动态回调:http://www.51hei.com/bbs/dpj-39836-1.html

      什么是“堆”和“栈”? 什么是动态内存分配?为什么需要动态内存分配?动态内存分配与静态内存分配有什么区别?到底什么是指针?我坚信通过本例程能够对这些问题有很深的理解。本例程很简单,却是很有深度!当然比起前面的链表例程那就简单多了。

        什么叫编程?答案有很多。我更认同“编程就是数据结构+算法”的观点。如果不能正真搞懂C语言,所谓的嵌入式开发就很难学得好。学习C语言干什么?计算机语言是用来模拟现实世界的,是用来解决现实生活中的问题的。

      下面的例子可以在VC++6.0编译平台运行仿真:

#include "stdio.h"#include "stdlib.h"
/*
“栈”和“堆”存在于内存中的不同地址处,即存在于不同的存储区。

什么是栈空间?栈空间是静态内存分配,空间大小由编译器决定;静态分配的内存在“栈”里,程序运行结束由系统
自动释放;函数运行时的临时数据和以如“char A;”形式声明的变量空间都属于静态内存,存储在“栈”里,“栈”
是一种先进后出“FILO”的数据结构;所谓“静态”是指数据结构一旦声明内存空间就固定不变。

什么是堆空间?堆空间由动态内存分配,大小由运行时malloc()函数(或new())灵活决定;空间大小根据实际需要灵活把握;
malloc()函数动态分配的空间在“堆”里;malloc()函数动态分配的空间必须由程序员通过free()函数(delete())释放,否则可能会造成内存泄露!是一种先进先出“FIFO”的数据结构;如,“队列”;

  如,static int=9;//int类型9,存储在栈里

*/
int main(void)
{
  // char buf[10000];
   int i=0;
   int n;
  
   while(i++<2)//这里i表示循环两次,也就是说 scanf("%s",buf);操作少于2次!
   {
     scanf("%d",&n);//给n动态赋值
     char * buf = (char*)malloc(n+1);//一定要强制类型转换,否则报错!
         if(!buf)//相当于JAVA里的抛出异常,如果动态内存分配失败
         {
                 perror("malloc");
                 exit(-1);//#include "stdlib.h",属于C语言库函数,退出该进程
         }
     scanf("%s",buf);//给buf空间赋值以字符串
     printf("%s\n",buf);//打印出字符串
     free(buf); //将动态空间及时释放,如果不及时释放或将该语句注释掉会怎样呢?通过仿真发现无法打印出结果!
   
   }
  return 0;
}

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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