BSS段:(bss segment)通常是指用来存放程序中
未初始化的全局变量和静态变量
的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
数据段:数据段(data segment)通常是指用来存放程序中
已初始化的全区变量和静态变量
的一块内存区域。数据段属于静态内存分配。
代码段:代码段(code segment/text segment)指用来存放
程序执行代码
的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读和执行
堆:堆(heap)用来存放进程运行中被
动态分配的内存段
,它的大小并不固定。
栈(stack):又称堆栈,
存放程序的局部变量(但是不包括static声明的变量,static意味着在数据段中存放变量)
。除此之外,在函数被调用时,栈用来传递参数和返回值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int sum(int a)
{
auto int c = 0;
static int b = 3;
c += 1;// 1
b += 2;// 5
//printf("b = %d, c = %d\n",b, c);
return(a+b+c); //8
}
void main()
{
int i;
int a = 2;
for(i = 0; i < 5; i++)
{
printf("%d,", sum(a));
}
getchar();
getchar();
}
运行结果8,10,12,14,16
每次循环的差别就在于b,b是静态变量,存放在数据段,一旦定义,b就只有一个,程序里面对b有改变,则b的值就会变化,在循环过程中b每次加2,同时,静态变量的定义只有一次。
而c是局部变量,相当于int c ,存放在栈里面,当其所在块的大括号运行完后 c消失,每次在循环调用时需要重新定义。