- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别
一、程序的内存分配 一个由 C/C++编译的程序占用的内存分为以下几个部分: 1、栈区 (stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的 值等。其操作方式类似于数据结构中的栈。 2、堆区 (heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可 能由 OS 回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区 (静态区)(static)— 全局变量和静态变量的存储是放在一块的, 初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的 静态变量在相邻的另一块区域。程序结束后有系统释放 4、文字常量区 — 常量字符串就是放在这里的。 程序结束后由系统释放。 5、程序代码区 — 存放函数体的二进制代码。 二、例子程序 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b;// 栈 char s[] = abc; //栈 char *p2; //栈 char *p3 = 123456; 123456\0;//在常量区,p3 在栈上。 static int c =0; //全局 (静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得 10 和 20 字节的区域就在堆区。 strcpy(p1, 123456); //123456\0 放在常量区,编译器可能会将它与 p3 所 指向的123456优化成一个地方。 } 三、从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所 有的源文件。当然,其他不包含全局变量定义的源文件需要用 extern 关键字再 次声明这个全局变量。 局部变量也只有局部作用域,它是自动对象 (auto),它在程序运行期间不是一 直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销, 其所占用的内存也被收回。 静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程 序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可 见的,而静态局部变量只对定义自己的函数体始终可见。 静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文 件的话,它作用于定义它的文件里,不能作用到其它文件里,即被 static 关键 字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字 的静态全局变量,它们也是不同的变量。 从分配内存空间看: 全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量 在栈里分配空间。 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即 改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了 它的使用范围。因此 static 这个说明符在不同的地方所起的作用是不同的。 四、总的来说就是: 1、生存周期不同 2、作用范围不同 3、分配方式不同 再来看下堆和栈的不同: 1、分配方式不同; 2、空间大小不同; 3、分配效率不同; 4、能否产生碎片不同; 5、生长方向不同; 1、分配方式不同 栈: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中 为 b 开辟空间 堆: 需要程序员自己申请,并指明大小,在 c 中malloc 函数 如 p1 = (char *)malloc(10); 在 C++中用new 运算符 如 p2 = (char *)new(10); 但是注意 p1、p2 本身是在栈中的。 2、 空间大小不同 一般来讲在 32 位系统下,堆内存可以达到 4G 的空间,从这个角度来看堆内存几 乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如, 在 VC6 下面,默认的栈空间大小是 1M。 3、分配效率 栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存 器存放栈的地址,压栈出栈都有专门的指令执 行,这就决定了栈的效率比较高。 堆则是 C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库 函数会按照一定的算法 (具体的算法可以参考 数据结构/操作系统)在堆内存中 有哪些信誉好的足球投注网站可用的足够大小的空间,
您可能关注的文档
- 【异乡好居】墨尔本买房之St Boulevard.doc
- 【异乡好居】多伦多买房之约克公寓.doc
- 【异乡好居】多伦多买房之opus公寓.doc
- 【异乡好居】墨尔本留学生租房之Urbanest公寓.doc
- 【异乡好居】奥兰多买房,恋上冬季花园.doc
- 【异乡好居】如何在伦敦艺术大学周围租房?.doc
- 【异乡好居】布里斯班买房之The Duke,没有袋鼠的袋鼠角.doc
- 【异乡好居】悉尼买房之Crowle Estate公寓.doc
- 【异乡好居】波士顿租房之留学生公寓62 On the Park.doc
- 【异乡好居】洛杉矶尔湾买房之贝肯花园.doc
- 《年产铝压铸汽车配件15万件生产项目环境影响报告表》.pdf
- 2025年陕西省榆林市初一语文上册期中考试试卷及答案.docx
- 2025初级银行从业考试《银行管理》考试试卷及答案.docx
- 2025初级统计考试卷含答案.docx
- 2024~2025学年广东省梅州市五华县八年级下学期期末物理试卷.doc
- 2025初级统计师统计专业知识和实务试题库及答案.docx
- 2025出版专业中级职业资格考试试题与参考答案.docx
- 2025年陕西省延安市四年级英语上册期中考试试卷及答案.docx
- 肾上腺酮信号对免疫调节的影响-洞察与解读.docx
- 2025初级统计师统计专业知识和实务试题库推荐及答案.docx
最近下载
- 2025年人教pep版六年级上册英语Unit3 Part C Story time.pptx VIP
- “双碳”目标下兴业银行绿色信贷风险管理研究.docx VIP
- 合并同类项练习题.doc VIP
- 天然气管道抢险施工方案.docx
- 外教社2024全新版大学高阶英语:综合教程 第4册 PPT课件U2.pptx VIP
- 兴业银行绿色信贷风险管理.docx VIP
- 不忘初心模板2.pptx VIP
- 重大火灾隐患判定规则GB35181-2025宣贯培训.pptx
- 不忘初心,继续前进PPT模板.ppt VIP
- 书记讲党课使命教育党课强化党的意识践行党的宗旨不忘初心继续前进党课ppt课件模板.pptx VIP
有哪些信誉好的足球投注网站
文档评论(0)