您的位置:首页 > 编程语言 > C语言/C++

c语言的内存分配

2015-08-23 17:52 232 查看
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消失,每次在循环调用时需要重新定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: