Linux C语言 04-常量、变量和生命周期

Linux C语言 04-常量、变量和生命周期

本节关键字:Linux、C语言、C语言五大区、常量、变量、生命周期
相关库函数:printf

C语言五大区

区域名称说明
栈区(stack)由编译器自动分配释放 存放函数的形参 局部变量的值等。
堆区(heap)一般由程序员分配释放 若程序员不释放 程序结束时可能由OS回收 注意它与数据结构中的堆是两回事 分配方式倒是类似于链表。
全局区(静态区)(static)全局变量和静态变量 程序结束后有系统释放 。
文字常量区(只读)常量字符串就是放在这里的 程序结束后由系统释放 。
程序代码区存放函数体的二进制代码,内存由系统管理。

常量

C语言常量固定值,在程序期间不会改变。常量可以是任意的基本数据类型,常量一经定义就不能再进行修改。

变量

变量分为四种:

  • 全局变量:定义在函数外部的变量,对整个文件有效;
  • 局部变量:定义在代码块或函数内部的变量,对当前代码块或函数有效;
  • 静态变量:只能在创建时初始化;
  • 寄存器变量:截止目前,工作中很少使用,在此简单说明什么叫做寄存器变量:寄存器变量直接存储在CPU的寄存器中,程序执行时无需频繁访问主机内存,所以对程序的执行效率有很大的提升效果。寄存器的长度一般比较小,所以一般只存储char、int或者指针类型。一般只用于函数中的变量或者形参,而不允许用于外部变量或静态变量。由于寄存器的数目被限制,C程序会自动将超过限定数目的寄存器变量转换成普通的变量。另外需要注意的是,寄存器变量不存在地址,是存储在硬件CPU中的,所以不可以用&来取地址。
#include <stdio.h>
#include <time.h>

#define CUR_CLOCK_US()	((double)clock())
#define CUR_CLOCK_MS()	(CUR_CLOCK_US() / 1000)
#define CUR_CLOCK_S()	(CUR_CLOCK_MS() / 1000)

int a; 	// 全局变量
int main()
{
	int b; // 局部变量
	double t, t1, t2;
	printf("a=%d, b=%d\n", a, b); 	

   // 寄存器变量的读取速率
   t = CUR_CLOCK_S();
   for (register int i=0; i<1000; i++) // 寄存器变量
   	printf("%lf\n", CUR_CLOCK_S());
   t1 = CUR_CLOCK_S();
   
   // 普通变量的读取速率
   for (int j=0; j<1000; j++)
   	printf("%lf\n", CUR_CLOCK_S());
   t2 = CUR_CLOCK_S();
   
   printf("CLOCKS_PER_SEC=%ld, t=%lf, t1=%lf, t2=%lf\n", CLOCKS_PER_SEC, t, t1-t, t2-t1);
	return 0;
}

生命周期

对象生命周期
全局变量从变量被创建开始,直至程序结束
局部变量从变量被创建开始,到区域(函数或代码块)执行结束
静态变量从变量被创建开始,直至程序结束
寄存器变量从变量被创建开始,到区域(函数或代码块)执行结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值