局部变量,局部静态变量,全局变量,全局静态变量区别:
局部变量: 栈区
局部静态变量:静态区
全局变量: 静态区的常量区
全局静态变量:静态区
在进行C++/C++编程时,需要程序员对内存的了解比较精准。经常需要操作的内存可分为以下几个类别:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
![](http://file.elecfans.com/web1/M00/46/14/pIYBAFqQ_iCAK39cAAA5aeHLduE910.png)
以下是一段实际说明的程序代码:
这是一个前辈写的,非常详细
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}
在C语言的程序中,对变量的使用还有以下几点需要注意:
1.体中定义的变量通常是在栈上,不需要在程序中进行管理,由编绎器处理。
2.用malloc,calloc,realloc等分配内存的函数所分配的内存空间在堆上,程序必须保证在使用free释放,否则会发生内存泄漏。
3.所有函数体外定义的是全局变量,加了static后的变量不管是在函数内部或外部都放在全局区。
4.使用const定义的变量将放于程序的只读数据区。
三:程序中段的使用
下面用一个简单的例子来说明C语言中变量和段的对应关系。C语言程序中的全局区(静态区),实际对应着下述几个段:RO Data; RW Data ; BSS Data.
一般来说,直接定义的全局变量在未初始化数据区,如果该变量有初始化则是在已初始化数据区(RW Data),加上const则将放在只读数据区。
例:const char ro[ ] = {"this is read only data"}; //只读数据区
static char rw_1[ ] ={"this is global read write data"}; //已初始化读写数据段
char BSS_1[ 100];//未初始化数据段
const char *ptrconst ="constant data";//字符串放在只读取数据段
int main()
{
short b;//在栈上,占用2个字节
char a[100];//在栈上开辟100个字节,工的值是其首地址
char s[ ]="abcdefg";//s在栈上,占用4个字节
//“abcdefg”本身放置在只读数据存储区,占8个字节
char *p1;//p1在栈上,占用4个字节
char *p2="123456";//p2 在栈上,p2指向的内容不能改,
//“123456”在中读数据区
static char rw_2[ ]={"this is local read write data"};//局部已初始化读写数据段
static char BSS_2[100];//局部未初始化数据段
static int c = 0;//全局(静态)初始化区
p1=(char *)malloc(10 * sizeof(char ) );//分配内存区域在堆区
strcpy(p1,"xxxx");//“XXXX”放在只读数据区,占5个字节
free(p1);//使用free释放p1所指向的内存
return 0;
}
原文标题:年过完了,加油学习工作吧!你知道嵌入式c中各变量存储位置吗?
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。
收藏
人收藏
扫一扫,分享给好友
复制链接分享
评论
发布评论请先 登录
相关推荐
LT8668SX-DHDMI 2.0/4 Port MIPIM/LVDS,8个数据通道组成DP/eDP,使用嵌入式SPI闪存固件存储带缩放,
1. 一般的描述
LT8668SX-D可以配置在HDMI2.0标准下工作,最大6Gbps的数据速率。 ...
发表于 03-19 10:04 •
2604次
阅读
全志T507核心板常见问题解析
本文硬件平台采用全志T507四核车规级处理器设计核心板,本文整理在使用飞凌嵌入式T507产品过程种,....
发表于 03-18 16:41 •
12次
阅读
如何在Docker构建出来的系统镜像中进行热点测试
飞凌嵌入式FETA40i-C核心板、FETT3-C核心板支持Docker容器技术,本节将展示使用Do....
发表于 03-18 15:00 •
14次
阅读
第九章 AVR C语言的应用.PDF
本教程讲解的是AVR C语言编程,包括开发环境、语言语法、特殊用法基础知识的讲解
发表于 03-17 14:21 •
12次
阅读
分享一些单片机相关的理论知识
无论是初学单片机还是在学校的人来说,如果只是按教科书式的学法,上来就搞一堆名词指令,学了几个月还搞不....
发表于 03-17 12:40 •
74次
阅读
浅谈RISC-V星光板的启动流程
继《在RISC-V星光板上创建Debian系统镜像》之后,这一期来聊聊RISC-V星光板的启动流程。
发表于 03-17 10:30 •
6次
阅读
i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC
本篇主要介绍了Linux移植的系统打包烧录的EMMC的方法,使用MfgTool工具,将**uboot....
码农爱学习 发表于 03-17 09:17 •
1515次
阅读
探讨嵌入式处理在工业和汽车领域的应用
您是否关注嵌入式处理在深度学习、步进电机、智能电网、ADAS 的应用?您是否在日常的设计中存在选型困....
德州仪器 发表于 03-17 08:57 •
140次
阅读
STM32控制电机调速硬件电路问题?
主要功能是STM32控制电机调速,按键控制电机运转时间与速度档位,数码管显示运转的档位与运转时间,开机设置运转时间与速度档位...
发表于 03-16 17:42 •
2429次
阅读
嵌入式边缘AI应用开发简化指南
面临的一系列挑战包括选择恰当的深度学习模型、针对性能和精度目标对模型进行训练和优化,以及学习使用在嵌....
发表于 03-16 11:36 •
927次
阅读
AMS与Luxonis建立合作伙伴关系 是德科技推自助式企业协议许可门户
Keysight Technologies, Inc.(纽约证券交易所代码:KEYS)是一家领先的技....
发表于 03-16 10:40 •
436次
阅读
stm32、51单片机和AVR单片机到底选哪一个
这些都是非常好的单片机学习路径,低中高单片机都是有大量的应用范围,只是分为不同的领域,工程、家用、军....
发表于 03-16 10:39 •
62次
阅读
星宸科技嵌入式CPU-SSD202D在摩托车无线投屏仪表批量
星宸科技股份有限公司(前身MStar)的嵌入式CPU芯片SSD202D,SSC8826Q等在摩托车仪....
星宸科技陈文新 发表于 03-16 10:26 •
2752次
阅读
为什么说C语言程序运行时要比其他语言编写的程序快得多
C语言程序运行时要比其他语言编写的程序快得多,因为它“离底层机器很近”,这个说法正确吗?
C语言编程学习基地 发表于 03-16 08:45 •
136次
阅读
C语言如何使用正则表达式
C语言的正则表达式规则,特此跟大家分享。
C语言编程学习基地 发表于 03-16 08:41 •
167次
阅读
VScode编译器如何配置C/C++编译环境
昨天有伙伴私信我,为什么我用C语言写的hello world几行代码,在编译器里面报错了呢?
C语言编程学习基地 发表于 03-16 08:38 •
129次
阅读
单片机学习都时候需要注意的步骤—依葫芦画瓢
很多朋友无论在学习什么东西的时候喜欢看别人的视频和程序,这些都能看懂然后就觉得自己都会了,等到自己写....
发表于 03-15 17:04 •
45次
阅读
星宸科技(SigmaStar)智能AI芯片SSD268G性能讲解
星宸科技SigmaStar推出的高整合度,多功能一体化智能AI芯片SSD268G,丰富的接口和内置Ip可以满足各种不同的应用场景和产...
发表于 03-15 16:45 •
607次
阅读
NXP iMX8MP开发板在UUU烧写时卡在99%
来源 | 飞凌嵌入式 题图|OKMX8MP-C开发板 近期查看飞凌嵌入式技术支持部门问题反馈列表时,....
发表于 03-15 16:24 •
17次
阅读
通过虚拟硬件原型 加速边缘智能系统创新
作为移动互联网时代智能手机芯片架构的领军者,Arm总结了推动市场发展的要素,并推出先进现代的方案和工....
发表于 03-15 15:55 •
957次
阅读
单片机实现24C02存储上次使用中状态的C语言实例
单片机实现24C02存储上次使用中状态的C语言实例
发表于 03-15 14:19 •
25次
阅读
嵌入式驱动开发两大子系统的使用
本文的关注点是 gpio driver --> gpio subsystem core -> gpi....
FPGA之家 发表于 03-15 13:41 •
189次
阅读
Verilog逻辑设计中的循环语句和运算符
“ 本文主要分享了在Verilog设计过程中一些经验与知识点,主要包括循环语句(forever、re....
FPGA之家 发表于 03-15 11:41 •
183次
阅读
gpio和pinctrl子系统的关系与区别
gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统....
FPGA之家 发表于 03-15 11:40 •
202次
阅读
如何逐渐成为高级嵌入式工程师呢?
对于硬件来讲有几个方向,就单纯信号来说分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个....
STM32嵌入式开发 发表于 03-15 09:44 •
172次
阅读
单片机的中断系统是什么,它的作用是什么
这个还用问?答案肯定不是。学习 51单片机好处是,学会51之后自然就会举一反三和融会贯通,市面上单片....
发表于 03-14 17:20 •
26次
阅读
涂鸦模组开发(压力传感器)—4.上报传感器数据给涂鸦模块
概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物....
发表于 03-14 15:42 •
4次
阅读
涂鸦模组开发(压力传感器HX711)—3. 涂鸦模组数据通信
概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物....
发表于 03-14 15:09 •
10次
阅读
涂鸦模组开发(压力传感器HX711—2压力传感器HX711
概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物....
发表于 03-14 14:29 •
14次
阅读
作品分享-基于RT-Thread系统和N32G457开发板开发的电子围栏设计
基于RT-Thread系统和N32G457开发板开发的电子围栏设计,主要采用的是N32G457开发板,并搭载AIR724 4G模块作为数据传输...
发表于 03-14 14:25 •
2035次
阅读
C语言使用回调函数模拟委托与反射
函数是C语言的核心概念。主调函数(caller)调用被调函数(callee)是一般的调用关系,如果被....
STM32嵌入式开发 发表于 03-14 10:19 •
137次
阅读
常见的嵌入式WEB服务器介绍
常见的嵌入式WEB服务器包括:Lighttpd, Shttpd, Thttpd, Boa, Mini....
嵌入式ARM 发表于 03-14 10:05 •
134次
阅读
i.MX6ULL嵌入式Linux开发4-根文件系统构建
本篇使用BusyBox来构建根文件系统,并通过NFS网络调试的方式实现根文件系统挂载测试,实测时解决....
码农爱学习 发表于 03-14 08:41 •
198次
阅读
i.MX6ULL嵌入式Linux开发3-Kernel移植
本文进行Linux内核的移植。
码农爱学习 发表于 03-14 08:36 •
196次
阅读
第一个C语言编译器的来源
不知道你有没有想过,某种编程语言的第一个编译器是怎么来的呢?这不就是“鸡生蛋,蛋生鸡”的问题吗?
嵌入式ARM 发表于 03-12 12:36 •
672次
阅读
详解C语言中的短路现象
C语言一经出现,就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语....
嵌入式ARM 发表于 03-12 12:23 •
575次
阅读
如何快速学习并精通C语言
学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文....
嵌入式ARM 发表于 03-12 11:59 •
428次
阅读
编写一个简单的C51程序
对于嵌入式系统,如果没有运行RTOS,那么程序开发中的 主函数(main())需要通过某种机制使其永....
嵌入式ARM 发表于 03-12 11:17 •
388次
阅读
嵌入式系统的软件架构设计
嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的....
嵌入式ARM 发表于 03-12 11:06 •
372次
阅读
嵌入式常用的软件框架介绍与选择
在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整....
硬件攻城狮 发表于 03-12 09:33 •
235次
阅读
C语言操作寄存器的常见手法
使用C语言对寄存器赋值时,常常需要用到C语言的位操作方法。把寄存器某位清零 假设a代表寄存器,....
硬件攻城狮 发表于 03-12 09:06 •
206次
阅读
嵌入式操作系统任务的定义、特性及划分
在嵌入式开发中,面对的都是单个 CPU 的情况,而在这个开发过程中,我们会涉及到裸机开发或者是跑操作....
嵌入式ARM 发表于 03-12 08:49 •
351次
阅读
深入介绍三种不同的程序架构
在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整....
嵌入式ARM 发表于 03-12 08:36 •
317次
阅读
【吉方工控G-3288-02开发板试用体验】深入调研与进度汇报
首先,在论坛中拜读了几位前辈的展示,发现大家几乎都在用一款GPS模块,这与我原本的开发目的有所不同。我希望明确下此工控机...
发表于 03-11 18:17 •
597次
阅读
涂鸦模组开发(压力传感器HX711)—1.模块准备
概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物....
发表于 03-11 17:54 •
10次
阅读
基于全志A40i核心板实现的呼吸机解决方案
导读 呼吸机是一种用来替代,控制或者改变患者正常的生理呼吸,增加患者肺活量,改善呼吸功能,维持患者体....
发表于 03-11 16:05 •
18次
阅读
单片机学习:关于P0和P2口的一些知识分享
学校为什么能存在,光靠看一本书就能自学成才,那还要学校有什么用,当然了,除了一些学习能力很强,且有一....
发表于 03-11 13:34 •
30次
阅读
单片机原理I/O口结构:P0口和P2口的结构介绍
实话告诉你,除非学习能力很强,且很有自主学习能力的人,才适合自学这条路,如果不具备以上能力的,或者想....
发表于 03-11 13:31 •
54次
阅读
2022全国大学生嵌入式芯片与系统设计竞赛龙芯赛道开启
2022全国大学生嵌入式芯片与系统设计竞赛龙芯赛道已于近期开启报名。本届大赛由中国电子学会主办,东南....
龙芯中科 发表于 03-11 12:33 •
470次
阅读
为什么嵌入式开发要选择C语言?
简洁紧凑,使用灵活的语法机制,并能直接访问硬件能够直接访问硬件的语言有:汇编和C语言汇编属于低级语言....
硬件攻城狮 发表于 03-11 10:21 •
170次
阅读
P3口的相关结构和功能的知识分享
所有人的大道理都懂,但是自己很难控制自己,自学时间上不容易把控,还是跟班学习好点,有人看着不学也得学....
发表于 03-10 17:50 •
27次
阅读
C语言有哪些语法技巧和功能
C语言常常让人觉得它所能表达的东西非常有限。它不具有类似第一级函数和模式匹配这样的高级功能。但是C非....
strongerHuang 发表于 03-10 17:42 •
820次
阅读
51点灯与Linux驱动点灯的区别
嵌入式初学者入门的第一个“项目”就是LED点灯,那么,本文带你看看51、STM32、Linux点灯有....
strongerHuang 发表于 03-10 17:37 •
1401次
阅读
一文详细了解飞凌嵌入式RK3568核心板
近年来,国产芯片产业发展迅速,国内主流IC厂商陆续推出了诸多备受市场认可的嵌入式处理器,在各领域得到....
发表于 03-10 15:59 •
33次
阅读
请问RK3288 OTG如何切换为Host模式?
请问RK3288 OTG如何切换为Host模式?
发表于 03-10 08:37 •
760次
阅读
如何配置和调试RK3288 HDMI?
如何配置和调试RK3288 HDMI?
发表于 03-10 08:30 •
652次
阅读
RK3288里的dts和dtsi是什么?
RK3288里的dts和dtsi是什么?
发表于 03-10 07:57 •
600次
阅读
使用GoRK3288库的时候需要用到的语法有哪些呢
使用GoRK3288库的时候需要用到的语法有哪些呢?...
发表于 03-10 06:49 •
497次
阅读
如何在RK3288红外遥控器增加系统中已有的键值?
如何在RK3288红外遥控器增加系统中已有的键值?...
发表于 03-10 06:38 •
236次
阅读
|