c语言的内存分配

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消失,每次在循环调用时需要重新定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值