c 程序的存储结构(Storage structure of C program).doc

c 程序的存储结构(Storage structure of C program).doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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,静态的,对应两种存储期:自动存储期和静态存储期。 汽车和登记对应

您可能关注的文档

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档