你知道嵌入式c中各变量存储位置吗 您所在的位置:网站首页 静态变量的存储位置 你知道嵌入式c中各变量存储位置吗

你知道嵌入式c中各变量存储位置吗

#你知道嵌入式c中各变量存储位置吗| 来源: 网络整理| 查看: 265

局部变量,局部静态变量,全局变量,全局静态变量区别:

局部变量: 栈区

局部静态变量:静态区

全局变量: 静态区的常量区

全局静态变量:静态区

在进行C++/C++编程时,需要程序员对内存的了解比较精准。经常需要操作的内存可分为以下几个类别:

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。

以下是一段实际说明的程序代码:

这是一个前辈写的,非常详细

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次 阅读 LT8668SX-DHDMI 2.0/4 Port MIPIM/LVDS,8个数据通道组成DP/eDP,使用嵌入式SPI闪存固件存储带缩放, 全志T507核心板常见问题解析 本文硬件平台采用全志T507四核车规级处理器设计核心板,本文整理在使用飞凌嵌入式T507产品过程种,.... 发表于 03-18 16:41 • 12次 阅读 全志T507核心板常见问题解析 如何在Docker构建出来的系统镜像中进行热点测试 飞凌嵌入式FETA40i-C核心板、FETT3-C核心板支持Docker容器技术,本节将展示使用Do.... 发表于 03-18 15:00 • 14次 阅读 如何在Docker构建出来的系统镜像中进行热点测试 第九章 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次 阅读 i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC 探讨嵌入式处理在工业和汽车领域的应用 您是否关注嵌入式处理在深度学习、步进电机、智能电网、ADAS 的应用?您是否在日常的设计中存在选型困.... 的头像 德州仪器 发表于 03-17 08:57 • 140次 阅读 STM32控制电机调速硬件电路问题? 主要功能是STM32控制电机调速,按键控制电机运转时间与速度档位,数码管显示运转的档位与运转时间,开机设置运转时间与速度档位... 发表于 03-16 17:42 • 2429次 阅读 嵌入式边缘AI应用开发简化指南 面临的一系列挑战包括选择恰当的深度学习模型、针对性能和精度目标对模型进行训练和优化,以及学习使用在嵌.... 发表于 03-16 11:36 • 927次 阅读 嵌入式边缘AI应用开发简化指南 AMS与Luxonis建立合作伙伴关系 是德科技推自助式企业协议许可门户 Keysight Technologies, Inc.(纽约证券交易所代码:KEYS)是一家领先的技.... 发表于 03-16 10:40 • 436次 阅读 stm32、51单片机和AVR单片机到底选哪一个 这些都是非常好的单片机学习路径,低中高单片机都是有大量的应用范围,只是分为不同的领域,工程、家用、军.... 发表于 03-16 10:39 • 62次 阅读 stm32、51单片机和AVR单片机到底选哪一个 星宸科技嵌入式CPU-SSD202D在摩托车无线投屏仪表批量 星宸科技股份有限公司(前身MStar)的嵌入式CPU芯片SSD202D,SSC8826Q等在摩托车仪.... 的头像 星宸科技陈文新 发表于 03-16 10:26 • 2752次 阅读 星宸科技嵌入式CPU-SSD202D在摩托车无线投屏仪表批量 为什么说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次 阅读 星宸科技(SigmaStar)智能AI芯片SSD268G性能讲解 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次 阅读 涂鸦模组开发(压力传感器)—4.上报传感器数据给涂鸦模块 涂鸦模组开发(压力传感器HX711)—3. 涂鸦模组数据通信 概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物.... 发表于 03-14 15:09 • 10次 阅读 涂鸦模组开发(压力传感器HX711)—3. 涂鸦模组数据通信 涂鸦模组开发(压力传感器HX711—2压力传感器HX711 概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物.... 发表于 03-14 14:29 • 14次 阅读 涂鸦模组开发(压力传感器HX711—2压力传感器HX711 作品分享-基于RT-Thread系统和N32G457开发板开发的电子围栏设计 基于RT-Thread系统和N32G457开发板开发的电子围栏设计,主要采用的是N32G457开发板,并搭载AIR724 4G模块作为数据传输... 发表于 03-14 14:25 • 2035次 阅读 作品分享-基于RT-Thread系统和N32G457开发板开发的电子围栏设计 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开发4-根文件系统构建 i.MX6ULL嵌入式Linux开发3-Kernel移植 本文进行Linux内核的移植。 的头像 码农爱学习 发表于 03-14 08:36 • 196次 阅读 i.MX6ULL嵌入式Linux开发3-Kernel移植 第一个C语言编译器的来源 不知道你有没有想过,某种编程语言的第一个编译器是怎么来的呢?这不就是“鸡生蛋,蛋生鸡”的问题吗? 的头像 嵌入式ARM 发表于 03-12 12:36 • 672次 阅读 详解C语言中的短路现象   C语言一经出现,就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语.... 的头像 嵌入式ARM 发表于 03-12 12:23 • 575次 阅读 详解C语言中的短路现象 如何快速学习并精通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次 阅读 【吉方工控G-3288-02开发板试用体验】深入调研与进度汇报 涂鸦模组开发(压力传感器HX711)—1.模块准备 概述 涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物.... 发表于 03-11 17:54 • 10次 阅读 涂鸦模组开发(压力传感器HX711)—1.模块准备 基于全志A40i核心板实现的呼吸机解决方案 导读 呼吸机是一种用来替代,控制或者改变患者正常的生理呼吸,增加患者肺活量,改善呼吸功能,维持患者体.... 发表于 03-11 16:05 • 18次 阅读 单片机学习:关于P0和P2口的一些知识分享 学校为什么能存在,光靠看一本书就能自学成才,那还要学校有什么用,当然了,除了一些学习能力很强,且有一.... 发表于 03-11 13:34 • 30次 阅读 单片机学习:关于P0和P2口的一些知识分享 单片机原理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次 阅读 P3口的相关结构和功能的知识分享 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次 阅读


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有