栈 (stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变 量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以 栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。注意:栈空间是向下增长的,每个线程有一个自己的栈,在linux上默认的大小是8M,可以用ulimit查看和修改。
栈系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;而堆是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。
以下是一个简单的c文件,环境是OS--Linux,ARCH--PPC
- ##sta.c### #include <stdio.h>
- int kk[100] = {1,2,3,4,5};
- int tt[100]; int ii;
- int main()
- { int i;
- static int si; char a[10]= "abcd";
- printf("i is %d/n"); return 0;
- }
- 经过gcc -S sta.c之后,生成的汇编代码如下
- ##sta.s###
- .file "sta.c" .gnu_attribute 4, 2
- .gnu_attribute 8, 3 .globl kk
- .section ".data" .align 2
- .type kk, @object .size kk, 400
- kk: .long 1
- .long 2 .long 3
- .long 4 .long 5
- .zero 380 .lcomm si.2254,4,4
- .type si.2254, @object .section .rodata
- .align 2 .LC1:
- .string "i is %d/n" .align 2
- .LC0: .string "abcd"
- .zero 5 .section ".text"
- .align 2 .globl main
- .type main, @function










