在C语言中,进程可在内存中分别存入五大分区:

1、text:也称为代码段,其中主要用于存放二进制指令、常量、被const修饰过的初始化过的全                      局变量、静态局部变量;该分区为只读权限,若强制修改将会产生段错误。

2、data:也称为数据段,其中主要用于存放初始化过的全局变量、静态局部变量。

3、bss:也称为静态数据段,主要用于存放未初始化过的全局变量、静态局部变量 。

Ps:该段内存在进程运行前自动清理为0

4、heap:也称为堆,该段主要由程序员手动管理,其存储空间足够大,但使用过程相对复杂。

5、stack:也称为栈,主要用于存放局部变量、块变量,由系统自动申请、释放内存,存储空间                      相对较小,但使用过程更

以上提到了一些变量,下面引入变量的分类:

变量在分类时,主要按照存储位置、生命周期以及作用范围三个方面进行区分。

1、全局变量:即定义在函数外的变量,存储于数据段及静态数据段(data\bss);其生命周期由程序开始维持到程序结束;在整个程序任意位置均可调用。如下图定义,num定义于主函数main()之外,则num为一个全局变量。

#include<stdio.h>int num = 10;int main()
{printf("%d",num);
}

2、局部变量:与全局变量想法,定义在函数内的变量为局部变量;存储于栈分区(stack);其生命周期仅由所在函数开始维持到所在函数结束;也仅可在所在函数内使用。如下图定义,flog定义于主函数main()内,则其为主函数内的一个局部变量,仅可在主函数内调用

#include<stdio.h>int main()
{int flog = 5;flog++;printf("%d\n",flog);
}

3、块变量:即定义在语句块内变量;存储于栈分区(stack);由本函数开始维持到到本函数结束;且仅可在语句块(if\for\while)内使用。如下图定义,近定义在for函数内的变量i则为一个块变量。

#include<stdio.h>int main()
{int x = 0;for(int i=0; i<10; i++){x += i;}printf("%d",x);
}

注意:局部变量会屏蔽同名的全局变量,块变量会屏蔽同名的局部变量和全局变量

为代码阅读方便,全局变量建议首字母大写,局部、块全部小写

C语言学习笔记:内存的五大分区相关推荐

  1. C语言学习笔记 —— 内存管理

    一.内存模型 对于一个C语言程序而言,内存空间主要由五个部分组成 代码段(text).数据段(data).未初始化数据段(bss),堆(heap) 和 栈(stack) 组成,其中代码段,数据段和BS ...

  2. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  3. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  4. C语言学习笔记之动态内存分配结构体——辣鸡版学生管理系统

    @[C语言学习笔记] 小辣鸡自学C语言中,好多视频教程都有这个案例,小辣鸡自己边学边记,下边是代码. 如有错误,感谢告知!!! #include<stdio.h> #include< ...

  5. 梓益C语言学习笔记之指针

    梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...

  6. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  7. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

  8. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  9. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  10. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

最新文章

  1. Android开发历程_18(XML文件解析)
  2. linux命令行中,双引号中的感叹号将被解释为历史命令
  3. Python计算机视觉:第二章 图像局部描述符
  4. Oracle10g的flashback drop
  5. VC中退出应用程序-几种很有用的方法
  6. 三十二楼层选几层最好_32层的房子买几楼好
  7. Tomcat Filter 源码分析
  8. python行转列_pandas.DataFrame中pivot()如何实现行转列的问题(代码)
  9. ASP.NET Core Kestrel 中使用 HTTPS (SSL)
  10. 19级:班级日常分享 | 一天一瞬间
  11. NodeJs 的安装及配置环境变量
  12. 打造新引擎,重构“芯”动力|龙芯生态论坛——安恒明御综合日志审计分析平台应用迁移
  13. libVLC 播放控制
  14. 如何查计算机硬盘型号,win10电脑的硬盘型号如何查看
  15. 金庸武侠、四大名著的语言风格
  16. 【阿里云-云栖社区】喜欢的记得关注(每日更新)
  17. 河北滹沱河流域上演喜鹊戏金雕
  18. 操作系统基础:进程逻辑思维导图,超简单理解进程管理
  19. 【附源码】计算机毕业设计java校园食堂订餐系统设计与实现
  20. 家里的网络太慢了,怎么办?

热门文章

  1. uniapp开发微信小程序的坑
  2. 人工智能Java SDK:读取本地MP4文件,实时检测人脸
  3. linux管道命令的简单操作
  4. 小程序下拉菜单组件(含多层筛选)
  5. 快上车 全套Python零基础入门教程免费分享 !
  6. 【android录屏填坑】录屏报错start fail,stop fail
  7. GitHub 上 6 款好看的后台模板
  8. MySQL导出csv数据文件
  9. 从零开始学USB(五、USB的电器特性)
  10. RISC-V嵌入式开发准备篇1:编译过程简介