您的位置:首页 > 新技术 >

在C语言中使用变量应注意的问题

2020-06-09 11:14:00 来源:电子说

一个或五个内存分区

内存分为五个区域,即堆、堆栈、空闲存储、全局/静态存储和常量存储。

1.FIFO是编译器在需要时分配的变量的存储区域,在不需要时自动清除。里面的变量通常是局部变量、函数参数等。

2.堆:指由new分配的内存块。他们的发布编译器并不关心他们。它们由我们的应用程序控制。通常,新的对应于删除。如果程序员不释放它,操作系统将在程序结束后自动回收它。

3.空闲内存区:指由malloc等分配的内存块。它非常类似于堆,但它使用自由来结束自己的生命。

4.全局/静态存储区:全局变量和静态变量被分配到同一个内存。在以前的C语言中,全局变量分为已初始化和未初始化。在C语言中没有这样的区别,它们共享同一个内存区域。

5.恒定存储区:这是一个特殊的存储区。它们存储常量,不允许修改(当然,您可以通过不适当的方式修改它们,并且有许多方法)

代码/数据/堆栈

内存主要分为代码段、数据段和堆栈。代码段包含程序代码,属于只读存储器。数据段存储全局变量、静态变量、常数等。堆存储自己的malloc或新变量,而其他变量存储在堆栈中。堆栈之间的空间是浮动的。在程序执行之前,数据段的内存不会被释放。调用函数首先找到函数的入口地址,然后计算分配给函数在堆栈中的形式参数和临时变量的空间,复制实际参数的副本并将其传输给形式参数,然后执行堆栈按压操作,并在函数执行后执行堆栈弹出操作。字符常量通常放在数据段中,并且只存储同一字符常量的一个副本。

二、C语言程序存储区

1.由C语言代码(文本文件)形成的可执行程序(二进制文件)需要经过编译-汇编-连接三个阶段。编译过程从C语言文本文件生成汇编程序,汇编程序从汇编程序形成二进制机器码,连接过程记录将从每个源文件生成的二进制机器码组合成一个文件。

2.用C语言编写的程序经过编译连接后会形成一个统一的文件,由几个部分组成。当程序运行时,将会生成其他几个部分。每个零件代表一个不同的存储区域:

1)代码或文本

代码段由程序中执行的机器代码组成。在C语言中,程序语句被编译成机器代码。在执行程序的过程中,中央处理器的程序计数器指向代码段中的每一段机器代码,处理器依次运行它。

2)只读数据段(RO数据)

只读数据段是程序使用的一些不会被改变的数据。使用这些数据的方式类似于表查找操作。因为这些变量不需要改变,它们只需要放在只读存储器中。

3)读写数据段(读写数据)已经初始化

初始化数据是在程序中声明的具有初始值的变量。这些变量需要占用内存空间。当程序被执行时,它们需要位于可读的存储区域,并且在程序运行时具有用于读取和写入的初始值。

4)未初始化的数据段

未初始化的数据是程序中声明但未初始化的变量。在程序运行之前,这些变量不需要占用内存空间。

5)堆

堆内存仅在程序运行时出现,通常由程序员分配和释放。对于操作系统,如果程序没有被释放,操作系统可以在程序(例如,进程)结束后存储它。

6)堆栈(statck)

堆内存仅在程序运行时出现。函数内部使用的变量、函数参数和返回值将使用堆栈空间,该空间由编译器自动分配和释放。

3.代码段、只读数据段、读写数据段和未初始化数据段属于静态区域,而堆和栈属于动态区域。代码段、只读数据段和读写数据段将在连接后生成,未初始化的数据段将在程序初始化时打开,而堆和栈将在程序饥饿期间分配和释放。

4.c语言程序分为两种状态:图像和运行时。在编译连接后形成的图像中,仅包括代码段(文本)、只读数据段(R0数据)和读写数据段(RW数据)。在程序运行之前,将动态生成未初始化的数据段(BSS),并且在程序运行时还将动态生成堆区域和堆栈区域。

注意:

1.一般来说,在静态图像文件中,每个部分称为一个部分,而每个部分在运行时称为一个段。如果没有详细的区分,它们被统称为段。

2.编译和连接后,c语言将生成代码段(TEXT)、只读数据段(RO数据)和读写数据段(RW数据)。在运行时,除了上述三个区域,它还包括一个未初始化的数据段(BBS)区域、一个堆区域和一个堆栈区域。

Iii .c语言程序的段落

1.段落分类

每个源程序生成的目标代码将包含源程序需要表达的所有信息和功能。目标代码中每个段的生成如下:

1)代码段(编码器

栏目导读

无人车“入春”,批量上路仍需“爬坡”

  防控疫情的需求激发之下,代替人类送药、送餐送菜、消毒巡逻的无人车成了疫情期间的特殊尖兵。疫情过后,无人车配送是否...

2020-03-23 17:12

5G、AI、大数据的发展,对智慧城市会有什么影响

市场分调研机构Omdia的最新数据分析显示,全球智能城市人工智能(AI)软件市场将从6 738亿美元(2019年),在2025年将增长到4...

2020-04-07 17:55

机器人制造过程中的传感器技术之磁光效应传感器

现代电测技术日趋成熟,由于具有精度高、便于微机相连实现自动实时处理等优点,已经广泛应用在电气量和非电气量的测量中。

2020-04-07 17:56

微软不需要快速拥抱VR

微软经常在游戏领域开辟路径,扮演开拓者的角色,这一点体现在很多方面,包括微软的尖端技术(DX12终极版 DX光追),硬件(X...

2020-04-07 17:57

波音Starliner载人航天器再次展开测试

去年 12 月,波音为美国宇航局发射了未载人的 Starliner 航天器。然而由于技术问题,任务并没有按计划进行。作为 NASA ...

2020-04-07 17:58