微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 堆栈入门——堆和栈区别

堆栈入门——堆和栈区别

时间:11-27 来源:互联网 点击:

返回地址

函数的参数

局部变量

当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

  堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

5.存取效率的比较 
  char s1[] = "aaaaaaaaaaaaaaa";
  char *s2 = "bbbbbbbbbbbbbbbbb";
  aaaaaaaaaaa是在运行时刻赋值的;
  而bbbbbbbbbbb是在编译时就确定的;
  但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。
  比如:
  #i nclude
  void main()
  {
  char a = 1;
  char c[] = "1234567890";
  char *p ="1234567890";
  a = c[1];
  a = p[1];
  return;
  }
  对应的汇编代码
  10: a = c[1];
  00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
  0040106A 88 4D FC mov byte ptr [ebp-4],cl
  11: a = p[1];
  0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
  00401070 8A 42 01 mov al,byte ptr [edx+1]
  00401073 88 45 FC mov byte ptr [ebp-4],al

堆和栈的区别可以引用一位前辈的比喻来看出:
  
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
  
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。比喻很形象,说的很通俗易懂,不知道你是否有点收获。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top