c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区
一、几个修饰关键字
全局变量:
全局变量跟函数一样也分为声明和实现。如果是全局变量,实现在它调用之后,那么需要在调用之前进行声明。
注意:全局变量的声明只能写在函数外,写在函数就不是全局变量了而是局部变量。
static:
修饰局部变量:
可以把局部变量变为静态变量。意思就是:程序一启动就加载,程序退出才会回收空间(跟全局变量很像) 。
静态变量:用static修饰的局部变量就叫静态变量。
修饰全局变量:
让全局变量只能在本模块中访问。
修饰函数:
修饰函数的话,只能在本模块中访问。
extern:
不能修饰局部变量。
修饰全局变量:
让全局变量在所有模块中都能访问。
修饰函数:
extern修饰函数,代表所有模块都能访问。它是默认的(不写就是extern)
以下两个都只能修饰局部变量。
auto(了解):默认的,交给系统自动管理内存(放在栈区),就是什么时候开辟,什么时候回收,系统管理。
register(了解):把变量加到寄存器。寄存器就是CPU临时保存数据的地方,特点是:非常快,但是容量小,造价金贵,所以只能保存极少的数据。
后编译时代,意思就是编译器在编译的时候会自动根据你代码进行优化,编译器帮你判断什么时候用auto,什么时候用register
二、内存分区
栈区: 所有局部的变量,由系统自动管理,出了作用域就回收
堆区: 程序员自己申请开辟的空间,都是在堆区,程序员自己维护回收
全局区: 所有的全局变量和静态变量,程序一启动就开辟,程序退出才回收
bss段和data段
bss段保存的是所有未初始化的全局变量和静态变量(只是记录一下,记录有多大)
data段保存的是所有已初始化的全局变量和静态变量
常量区:rodata段。就是所有的常量。文本常量(字符串),程序一启动就开辟,程序退出才回收
代码区:就是编译后的二进制代码。程序一启动就开辟,程序退出才回收
text段
从上往下,地址是从高到低
只需要记住:每个区分别放的是什么东西就行了。
c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区的更多相关文章
- c语言学习之基础知识点介绍(八):函数的基本用法
本节开始说函数. 一.函数的基本用法 /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...
- c语言学习之基础知识点介绍(十四):指针的进阶
一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...
- c语言学习之基础知识点介绍(十):数组
本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...
- c语言学习之基础知识点介绍(二十):预处理指令
一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...
- c语言学习之基础知识点介绍(十五):函数的指针
一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...
- c语言学习之基础知识点介绍(十二):结构体的介绍
一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...
- c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量
一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址 ...
随机推荐
- spring-- 事务--9
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
- 五指CMS v1.2 GBK 发布下载
五指CMS v1.2 GBK 版本下载地址: http://www.wuzhicms.com/uploadfile/wuzhicms/wuzhicms-v1.2.zip 从内测到公测,五指 ...
- 【Java基础】用LinkedList实现一个简单栈的功能
栈的基本功能 栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法. 构造存储对象Student /** ...
- guslterFS
Installing GlusterFS - a Quick Start Guide Purpose of this document This document is intended to giv ...
- 局域网yum服务器创建
yum createrepo createrepo dir 配置httpd发布yum-repo; 在客户端添加yum.rep配置文件;
- mysql group by 用法解析(详细)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- 教程-Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- Win+R指令(1)
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本)1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr. ...
- uva 1422 - Processor(二分+优先队列)
题目链接:uva 1422 - Processor 题目大意:有一个机器要处理一些问题,给出这些问题可以开始的时间和必须完成的时间,以及任务的工作量,问说机器必须以最少每秒多少得工作量才能完成这些任务 ...
- struts2设置<s:select>默认选中项的方法
struts2的select标签中,常用的有以下几个属性:(1)struts2中的select 标签中,必须设置的属性只有一个,即是list.(2)select标签的list中必须有值,不然会报错.如 ...