全局变量,静态变量,程序的内存分配,char a[]和char *a的区别,char*a[]和char**a

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
摘要由CSDN通过智能技术生成

全局变量,静态变量,程序的内存分配,char a[]和char *a的区别, char*a[]和char**a

程序的内存分配

一个由c++编译的程序占用的内存分为以下几个部分:
1. 栈区: 类似于数据结构中的栈, 内存中一块连续的区域(windows下向低地址扩展, 2M或1M), 调用函数时, 程序中调用函数后的下一条语句的首地址先进栈, 以使得函数调用结束后能回到程序的下一个正确位置继续执行, 其次是函数的参数进栈, 再次是函数中的局部变量进栈.
2. 堆区: 类似于数据结构中的链表, 操作系统中有一个记录空闲内存地址的链表, 系统接收到申请时,会遍历该链表, 找到第一个大于所申请空间的堆结点, 将该结点从列表中删除, 分配给程序所需要的空间, 一般在该被分配的空间的头部,用一个字节记录所分配空间的大小, 使得程序delete空间时能释放掉正确的大小. 一般分配给程序所需空间后, 将剩余空间的首地址重新放入空闲链表中. 堆区的大小受限于计算机系统的有效虚拟内存.
3. 全局(静态)区
4. 文字常量区
5. 程序代码区

全局变量,静态变量

  1. 静态变量和全局变量存储在全局(静态)区,其生命周期为整个程序的运行
  2. 静态变量分为静态局部变量和静态全局变量, 静态局部变量在函数内部声明(static),作用域为函数内部. 静态全局变量的作用域在其所在的源文件
  3. 静态全局变量和非静态全局变量的区别在于, 若源程序有几个源文件构成, 那么非静态全局变量的作用域为整个源程序, 而静态全局变量的作用域为其所在的源文件. 若要在其他源文件中用到在本源文件中定义的非静态全局变量, 需要在其他源文件中用extern对该全局变量做声明. 一般的做法是, 在本源文件的头文件中用extern做声明, 其他文件include该头文件.
  4. 若函数开头使用了static关键字, 那么该函数只对其所在的源文件可见
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值