Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176966
  • 博文数量: 40
  • 博客积分: 1573
  • 博客等级: 上尉
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-09 22:50
个人简介

忙得不会思考了!!!!!!

文章分类

全部博文(40)

文章存档

2015年(2)

2014年(1)

2011年(15)

2010年(3)

2009年(19)

我的朋友

分类: C/C++

2010-05-24 21:50:36

首先讲C编译器的内存分配:

 代码区

 数据区

 用户区=线程栈+堆

其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量
 
然后讲一下编译的大致顺序:
注释-->
预处理-->
编译-->
连接。
 
它们的保存:
const修饰的是变量,会被编译到符号集中去,它本身是变量这是个大前提,如果把这个概念弄错了,你就会很可能会用这个变量来做数组的维数,而数组的维数只能是常量,这点要明白。
define定义的常量就可以作为数组的维数,它当然是保存在数据区的常量空间内,并且它发生在预处理阶段,相对const变量的处理要早。
static修饰的变量则被编译进数据区的静态空间内,同const修饰的变量和define定义的常量一样,一直存在,直到程序终止。
 
它们的初始化(如果有的话)
const修饰的变量是在编译时放到了符号集中,只是在第一次使用的时候分配空间,没有什么初始化这样的概念。
define定义的变量则是在每次出现在“=”的右边时都会分配空间,你要注意是都分配了空间。至于在预处理的时候有没有分配空间的概念,我自己尚不清楚。
static修饰的变量的初始化要等到运行的时候。
 
它们存在的目的:
const和static修饰的数据都是有类型的,由于const修饰变量常常理解成常量,它可以看做是取代define定义的无类型常量的。
static修饰变量则多在子函数中使用,你大可发挥一下,找到它的妙用。
阅读(1843) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~