"); //-->
一、c程序存储空间布局
C程序一般由下列部分组成:
1)正文段——CPU执行的机器指令部分;少量的液晶字库等也放在这里;只读,防止程序由于意外事故而修改自身指令;
2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。
3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。
4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。
5)堆——动态存储分。
|-----------|
| |
|-----------|
| 栈 |
|-----------|
| | |
| |/ |
| |
| /| |
| | |
|-----------|
| 堆 |
|-----------|
| 未初始化 |
|-----------|
| 初始化 |
|-----------|
| 正文段 |
|-----------|
二、static的作用
1、内部标识,也就是说无论是定义函数还是变量,只要有了static,就不能被外部调用;
举例说明:static char i = 0;
static int putchar(int c );
{
static char a = 0;
....a++;.....
}
extern sprintf(const char *format , ... );
{
putchar(...);
}
假设以上变量及函数都在uart.c的文件中main()函数是在main.c中,那么,在main中只能调用sprintf,而不能直接调用putchar,也不能直接用变量 i。
2、静态变量,我认为这个是针对于static定义的局部变量而言的,除了只能在定义它的函数内局部使用外其他的和全局变量是一样的(只在第一次调用时初始化,用完后空间不会释放,已存值不会改变)。比方说以上的a在第一次调用时被初始化为0.然后自加为1,那么第二次调用时(无论谁调用)a的初始值就是1,运行完就是2。
以上内容是以我爱研发网(52RD.com) - R&D大本英http://www.52rd.com/blog/Detail_RD.Blog_imjacob_5297.html为依据根据自己的理解表达出来的,欢迎大家来一起讨论,有不明白的地方可以参照原文。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。