爱问知识人 爱问教育 医院库

什么是堆栈

首页

什么是堆栈

看到手机说明上有"堆栈"占多少多少内存
想问一下各位什么是"堆栈"呢?
能详细一点说吗?

提交回答
好评回答
  • 2005-03-07 17:46:43
    动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。 
    

    1***

    2005-03-07 17:46:43

其他答案

    2005-03-10 00:53:15
  • 简单的说,堆栈是一个细口的漏斗,先进的后出。
    例如:把鸡蛋一个一个的依次塞到长筒袜里面。最先塞进去的最后拿出来。
    手机的堆栈是手机内存管理的一个方法,一般大小为2M

    D***

    2005-03-10 00:53:15

  • 2005-03-07 19:45:36
  • 堆栈就是为计算机开辟存放数据的临时空间。

    1***

    2005-03-07 19:45:36

  • 2005-03-07 17:53:03
  • 就是某一段程序处理到一半,要去处理另一段程序,那本来那段程序中用到的变量就需要保存起来,等另一段程序处理完了,再回来处理原来那段程序的时候,把那些变量再拿回来就是堆栈和出栈了

    h***

    2005-03-07 17:53:03

  • 2005-03-07 17:52:26
  •   说实话,自己也只有个模糊的概念,这些是书上没有的。靠平时的积累了。一般认为在c中分为这几个存储区
    1栈 - 有编译器自动分配释放
    2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
    3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静
    态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
       - 程序结束释放 4另外还有一个专门放常量的地方。 - 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分 配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪 里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效, 不能extern到别的文件用,在函数体内定义的static表示只在该函数体内有效。
      另外, 函数中的"adgfdf"这样的字符串存放在常量区。 比如: int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc";栈 char *p2; 栈 char *p3 = "123456"; 123456\0在常量区,p3在栈上。
       static int c =0; 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"12345 6"优化成一块。
       } 还有就是函数调用时会在栈上有一系列的保留现场及传递参数的操作。 栈的空间大小有限定,vc的缺省是2M。栈不够用的情况一般是程序中分配了大量数组和 递归函数层次太深。有一点必须知道,当一个函数调用完返回后它会释放该函数中所有 的栈空间。
      栈是由编译器自动管理的,不用你操心。 堆是动态分配内存的,并且你可以分配使用很大的内存。但是用不好会产生内存泄漏。 并且频繁地malloc和free会产生内存碎片(有点类似磁盘碎片),因为c分配动态内存时 是寻找匹配的内存的。而用栈则不会产生碎片。
       在栈上存取数据比通过指针在堆上存取数据快些。 一般大家说的堆栈和栈是一样的,就是栈(stack),而说堆时才是堆heap。 栈是先入后出的,一般是由高地址向低地址生长。 引用: 。

    烟***

    2005-03-07 17:52:26

类似问题

换一换
  • 手机使用 相关知识

  • 数码产品
  • 电子数码
  • 电子数码产品

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):