- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c 程序的存储结构(Storage structure of C program)
c 程序的存储结构(Storage structure of C program)
void (* singal (char * prt, float f)) (int);
程序存储空间c 2010 - 12 - 07 10: 16: 17 阅读82 评论0 字号: 大中小 订阅
一、c程序存储空间布局
c程序一直由下列部分组成:
1) 正文段 - - cpu执行的机器指令部分; 一个程序只有一个副本; 只读, 防止程序由于意外事故而修改自身指令;
2) 初始化数据段 (数据段) - - 在程序中所有赋了初值的全局变量, 存放在这里.
3) 非初始化数据段 (bss段) - - 在程序中没有初始化的全局变量; 内核将此段初始化为0.
4) 栈 - - 增长方向: 自顶向下增长; 自动变量以及每次函数调用时所需要保存的信息 (返回地址; 环境信息).
5) 堆 - - 动态存储分.
| ----------- |
| |
| ----------- |
| 栈 |
| ----------- |
| | |
| \ | / |
| |
| |
| / | \ |
| | |
| ----------- |
| 堆 |
| ----------- |
| 未初始化 |
| ----------- |
| 初始化 |
| ----------- |
| 正文段 |
| ----------- |
二、 面向过程程序设计中的static
1. 全局静态变量
在全局变量之前加上关键字static, 全局变量就被定义成为一个全局静态变量.
1) 内存中的位置: 静态存储区 (静态存储区在整个程序运行期间都存在)
2) 初始化: 未经初始化的全局静态变量会被程序自动初始化为0 (自动对象的值是任意的, 除非他被显示初始化)
3) 作用域: 全局静态变量在声明他的文件之外是不可见的.准确地讲从定义之处开始到文件结尾.
看下面关于作用域的程序:
/ / teststatic1.c
void display ();
extern int n;
int main ()
{
n = 20;
printf (% d n , n);
display ();
return 0;
}
/ / teststatic2.c
static int n; / / 定义全局静态变量, 自动初始化为0, 仅在本文件中
可见
void display ()
{
n + +;
printf (% d n , n);
}
文件分别编译通过, 但link的时候teststatic1.c中的变量n找不到定义, 产生错误.定义全局静态变量的好处:
1 不会被其他文件所访问, 修改
2 其他文件中可以使用相同名字的变量, 不会发生冲突.
2. 局部静态变量
在局部变量之前加上关键字static, 局部变量就被定义成为一个局部静态变量.
1) 内存中的位置: 静态存储区
2) 初始化: 未经初始化的全局静态变量会被程序自动初始化为0 (自动对象的值是任意的, 除非他被显示初始化)
3) 作用域: 作用域仍为局部作用域, 当定义它的函数或者语句块结束的时候, 作用域随之结束.
注: 当static用来修饰局部变量的时候, 它就改变了局部变量的存储位置,
从原来的栈中存放改为静态存储区.但是局部静态变量在离开作用域之后, 并没有被销毁, 而是仍然驻留在内存当中, 直到程序结束, 只不过我们不能再对他进行访问.
当static用来修饰全局变量的时候, 它就改变了全局变量的作用域 (在声明他的文件之外是不可见的), 但是没有改变它的存放位置, 还是在静
态存储区中.
3. 静态函数
在函数的返回类型前加上关键字static, 函数就被定义成为静态函数.函数的定义和声明默认情况下是extern的, 但静态函数只是在声明他的文件当中可见, 不能被其他文件所用.
例如:
/ / teststatic1.c
void display ();
静态staticdis();
国际main()
{
display();
staticdis();
收益率0;
}
/ / teststatic2 C。
无效display()
{
staticdis();
printf(“display()一直被称为“\n”);
}
静态staticdis()
{
printf(“staticdis()一直被称为“\n”);
}
文件分别编译通过,但是连接的时候找不到函数staticdis()的定义,产生错误。
定义静态函数的好处:
1 其他文件中可以定义相同名字的函数,不会发生冲突
2 静态函数不能被其他文件所用。
存储说明符汽车,登记,extern,静态的,对应两种存储期:自动存储期和静态存储期。
汽车和登记对应
您可能关注的文档
- 2015年最流行的男孩女孩英文名字推荐大全(Boys and girls in 2015 the most popular English recommended name Daquan).doc
- 2015高考物理一轮复习课时跟踪检测(十二)牛顿运动定律的综合应用(二)试题及完整解析答案-39 - 副本(2015 college entrance examination physics a review class tracking detection (twelve) comprehensive application of Newton's law of motion (two) questions and.doc
- 2014期末(At the end of 2014).doc
- 20种ps技术(20 kinds of PS Technology).doc
- 21世纪前十年对世界有重大影响的100人(100 in twenty-first Century the first ten years of the world have a significant impact).doc
- 211+985大学分数线与重点专业(211+985 scores and focus on the professional university).doc
- 21天潜意识巨人训练(21 days training giant subconscious).doc
- 22《猴子种果树》(22 monkey fruit).doc
- 22岁的女生,要有成人的视觉(22 year old girl to have adult vision).doc
- 22岁女生。要有成人的视觉,理性的智慧。如何气场强大,内心坚定(A 22 year old girl. To have adult vision, rational wisdom. How powerful gas field, a strong heart).doc
文档评论(0)