Day17、18、19学习记录

#c语言知识

内存管理

1.作用域

(1)代码块作用域(代码块是{}之间的一段代码)

(2)函数作用域

(3)文件作用域

2.局部变量(自动变量auto):

在函数(代码块{})内部定义的变量

(1)作用域:在函数内部

(2)生命周期:从变量定义到函数结束

*局部变量在栈区

*未赋初值,内容随机

*形参是局部变量的一种

3.全局变量

在函数外部定义的变量

(1)作用域:整个项目中所有文件

(如果在其他文件中使用 需要声明)

 (2)生命周期:从程序创建到程序销毁(和程序同生共死)

*全局变量存在数据区

*全局变量可以和局部变量重名 不同文件的全局变量不可重名

*数据在操作时会采用就近原则

重新开辟一片内存空间 地址不同       /      123和456地址相同

4. 静态(static)局部变量

(1)作用域:在定义的函数内部

(2)生命周期:从程序创建到程序销毁(和程序同生共死)

*在数据区进行存储,不会因为栈区的变化而发生改变。

*static局部变量的值只初始化一次,可赋值多次。

*若未赋初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符。

 

 (局部变量未初始化 值为乱码)

 

 

 

5.extern全局变量声明:extern int a;声明一个变量,这个全局变量在别的文件中已经定义了,这里只是声明,而不是定义。

6.全局函数和静态函数

在c语言中函数默认都是全局的,使用关键字static可以将函数声明为静态,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能被调用,即使在其他文件中声明这个函数都没用。

对于不同文件中的static函数名字可以相同。

(声明了之后才能转过去)

7.全局函数

(1)作用域:在整个项目中所有文件中使用

(2)全局函数的名称在作用域中是唯一的。

*在c语言中,不支持函数重载(同一个函数名对应不同参数名)。

*一个函数可以调用自己(递归函数,一定要有出口)

8.静态函数 (可以和全局函数重名)

作用域:当前文件中

生命周期:从程序创建到程序销毁(和程序同生共死)

注意:

*允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。

*同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

*所有的函数默认都是全局的,意味着所有的函数都不能重名,但如果是static函数,那么作用域是文件级的,所以不同的文件static函数名是可以相同的。

const int abc=123;安全的常量 存储区为数据区常量区 

内存四区:

全局初始化数据区/静态数据区(data段)

该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。

未初始化数据区(bss区)

存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行之前被内核初始化为0或者空(NULL)。

程序在加载到内存前,代码区和全局区(data和bss)的大小就是固定的,程序运行期间不能改变。然后,运行可执行程序,系统把程序加载到内存,除了根据可执行程序的信息分出代码区(text)、数据区(data)和未初始化数据区(bss)之外,还额外增加了栈区、堆区。

 

 1.代码区

*代码区存放CPU执行的机器指令既程序汇编而成的二进制代码。
*代码区是共享的,对于频繁执行的程序,内存中只需要保存一份。
*代码区是只读的,只读的原因是防止程序意外修改了指令。

*代码区还规划了局部变量的相关信息。

2.数据区

(1)bss段:

*未初始化的静态变量(全局、局部)

*初始化为0的静态变量(全局、局部)

*未初始化的全局变量和初始化为0 的全局变量

*未初始化的全局常量

data段:

*初始化非0的静态变量(全局、局部)

 *初始化非0的全局变量

 rodata段:

*初始化为0 的全局常量

*初始化非0的全局常量

3.栈区(stack)

栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

4.堆区(heap)

堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

 

(a、b间有间隔 防止被其他程序篡改数据 由高到低)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450125.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速理解复杂系统组成学习内容整合

目录 一、复杂系统组成 二、接入系统 (Access System) 三、应用系统 (Application System) 四、基础平台 (Foundation Platform) 五、中间件 (Abundant External Middleware) 六、支撑系统 (Supporting System) 参考文章 一、复杂系统组成 复杂系统是由多个相互关联、相…

2024程序员就业咋办?

国际研究机构Gartner会在每年10月份左右发布下一年度的战略发展趋势预测,并在次年3月左右发布和网络安全相关的趋势预测。绿盟科技通过将近3年的趋势预测进行分组对比分析后发现,除了众人皆知的AI技术应用外,数据模块化、身份优先安全、行业云…

【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)

基于(JavaWebSSM)的宠物领养管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物领养系统 本系统分为前台系统、管理员、收养者和寄养者4个功能模块。 前台系统:游客打开系统…

AIGC时代企业与个人应该如何应对?

引言:AIGC是一种新兴的技术趋势,它正在为各个领域带来更多的创新和变革。未来,随着技术的不断进步和应用范围的扩大,AIGC的影响力还将不断增强。新时代下企业与个人应该如何应对呢? 1. 什么是AIGC? AIGC是…

[每日一题] 02.03 - 质因数分解

质因数分解 枚举到n的平方根(得包括平方根) 偶数去除 import math n int(input()) if n % 2 0:print(max(n // 2,2)) else:for i in range(3,int(math.sqrt(n)) 1,2):if n % i 0:print(max(n // i,i))

GrayLog踩坑历险记

背景 GrayLog作为ELK的替代产品,是新生代的日志采集框架。在一个采集节点日志的需求中,因为节点很多,产生的日志也很多,因此尝试了使用GrayLog进行日志的采集。下面记录一下使用GrayLog中遇到的坑和解决方案。 一、部署与启动 …

二、操作系统【6分】

一、课程内容提要 二、考情分析 三、操作系统概述 1、操作系统的功能 2、特殊的操作系统 四、进程管理 1、进程与线程的概念 2、进程的状态 3、信号量与PV操作 P是要资源 V是释放资源 互斥S初始值非0,一般为1,先p后v 同步S初始值一般为0&#xff0c…

假期2.3

第二章 引用内联重载 一.选择题-* 1、适宜采用inline定义函数情况是(C) A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A …

双非本科准备秋招(15.1)—— 线程状态

线程状态按照不同的角度可分为五种和六种。 五种状态: 在学校学的操作系统中讲过进程的五种状态,从操作系统的层面来看,线程有五大状态,下面是经典的牛头图。 起始态:语言层面创建了线程对象,还没有和操作…

ArrayList常见问题

ArrayList 1、ArrayList底层的实现原理是什么 2、ArrayList list new ArrayList(10)中的list扩容几次 3、如何实现数组和list之间的转换 4、ArrayList和LinkedList的区别是什么

06:原生云K8S解密|K8S集群安装部署|K8S网络插件

原生云K8S解密|K8S集群安装部署|K8S网络插件 K8SK8S集群架构图解 K8S部署仓库初始化kube-master安装计算节点的安装token管理 配置flannel网络(master主机操作) K8S 有大量夸主机的容器需要管理,快速部署应用&#xff…

[SWPUCTF 2021 新生赛]ez_unserialize

根据下面的user_agent和Disallow可以判断这个是在robots.txt 我们看的出来这是一个反序列化需要我们adminadmin passwdctf construct 构造方法,当一个对象被创建时调用此方法,不过unserialize()时却不会被调用 destruct 析构方法,PHP将在对象…