变量和常量

常量:在程序执行过程中值不会发生变化的量。

分类:整型常量、实型常量、字符常量(由单引号引起来的字符或转义字符:\t,\n,\017等)、字符串常量,标识常量(#define)

变量:用来保存一些特定内容,并且在程序执行过程中随时会发生变化的量。

[存储类型]  数据类型  标识符   =  值

                 TYPE     NAME =  VALUE ;

标识符:给某段内存空间起个名字而已,尽量做到见名生义

存储类型:auto static register extern(说明型关键字)

auto:默认,自动分配空间,自动回收空间。在栈上

register(建议型):寄存器类型,资源少速度快,只能用于局部变量,不能定义全局变量,只能定义32位大小的数据类型(32位环境),寄存器中没有地址,所以一个寄存器类型的变量无法打印出地址查看或使用。

static(静态型):自动初始化为0或空值,并且有继承性。

extern(说明型):不能够改变被说明的变量的值。

=============================================

#define  宏名   (宏体)   //并不做语法检查

eg:#define  PI  3.1415

 

define可以带参数

#define  MAX(a,b)  ((a)>(b) ?(a):(b))

==============================================

#define在预处理的过程中处理,占用的是编译时间

函数在调用的位置,对当前的执行现场进行压栈保存,然后跳往函数的入口地址执行,函数执行完毕后,弹栈恢复现场,占用的是运行时间

==============================================

 

进程的内存布局:

代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。

 数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。

BSS:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零。

堆(heap:堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

:栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。 

posted @ 2016-02-22 15:17  muzihuan  阅读(276)  评论(0编辑  收藏  举报