范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C语言代码组成BSSDataStackHeapCodeConst

  一段C语言经过编译连接后,成为一段可以运行的代码,可运行的代码可以分为以下四个部分组成:全局变量/静态变量区、堆、栈、代码区。其中全局变量/静态变量区又分为未初始化变量区和初始化变量区,代码区又分为代码和常量区。即汇总下来,代码可以分为6部分组成,包括:BSS区(未初始化的全局变量/静态变量区)、Data区(实始化的全局变量区)、Stack区(栈区)、heap区(堆区)、Code区(代码区)、const区(常量区)。
  一、BSS区和Data区
  C语言编程中定义的全局变量、静态局部变量,就是分配在全局变量/静态变量区域,但是为什么又要分为BSS区域和Data区域呢?其实我们在定义全局或者静态变量区,有时我会对它赋初始值,有的又不会赋初始化,比如我们定义的全局变量,初始化的赋值,是怎么样写到变量区域中的,我们定义的静态局部变量,在定义时初始化后,为什么后面函数被调用,又不会再初始化呢?这个局部静态变量是怎么样实始化的,什么时候初始化的?
  如果分析编译后的汇编代码,就会发现在代码运行起来后,会有一段给变量赋值的指令,这一段代码,不是我们C代码对应的汇编,而是C编译器生成的汇编译代码,这段代码的作用就是给初始化了的静态变量和全局变量进行初始化。这也是为什么全局/静态变量区域,要分BSS和Data的原因。
  二、Stack区
  栈是一种先进后出的数据结构,这种数据结构正好完美的匹配函数调用时的模型过程,比如函数f(a)在运行过程中调用函数f(b),f(a)在运行过程中的变量就是分配在栈中,通过在调用f(b)前,会将代码中用到的R0~Rn寄存器的值保存到栈中,同时将函数的传入参数写入到栈中,然后进入f(b)函数,函数f(b)的变量b分配在栈中,当函数运行完毕后,释放变量b,将栈中存放的f(a)函数的运行的R0~Rn寄存器值恢复到寄存器中,同时f(b)的返回结果存入到栈中,这样f(a)继续运行。当一个函数运行完毕后,它在栈中分配的临时变量会全部释放。
  对于中断也是一样的,中断发生时,也是一个函数打断了另一个函数的运行,这种现场的保存(即寄存器的值),都是通过栈来完成的。所以栈的作用有: 函数运行时的临时变量; 函数调用时的保存现场的数据; 函数调用时的传递的参数; 函数的返回值
  三、Heap区
  全局变量分配的内存在代码整个运行周期内都是有效的,而在栈区分配的内存在函数调用完成后,就会释放。这两种内存模型都是由编译器决定它的使用,代码是无法控制的。那有没有内存是由用户控制的,要用时,就自由分配,不用时,就自行释放?答案是肯定的,这部分内存就是堆。
  用户需要使用的动态内存,就是通过malloc函数,调用分配的,在没有释放前,可一直由代码使用。当这部分内存不再需要使用时,可以通过free函数进行释放,将它归还到堆中。从这中可以看出,堆的内存,是按需分配的。这就是赋予了代码很大的自由度,但这也是会带来负作用的,比如:内存碎片化导致的malloc失败;忘记释放内存导致的内存泄露,而这些往往是致命的失误。
  四、Code区
  代码区就是编译后机器指令,这些指令决定了功能的执行。我们编译的代码一般是下载进flash中,但是运行,却有两种方式:在RAM中运行和在ROM中运行。 在RAM中运行,即是boot启动后,将flash中的代码复制到RAM中,然后PC指针在指到RAM中的代码中开始运行。 有时在调试时,我们可以直接将代码下载进RAM中运行进行调试,这样加快调试速度。便是大部分的情况我们的代码是从flash中开始运行的。
  五、常量区
  代码中的常量,一部分是作为立即数,在代码区中,但是像定义的字符串、给某数组赋值的一串数值,这些常量,就存在常量区,我们常用const来定义一个常量,即该变量不能再必变。这部分的变量,编译器一般将它定义的flash中。
  六、各个区域大小的是如何决定的:
  code区和const区:是由代码的大小和代码中常量的多少来决定的。
  bss区和data区:这是由代码中定义的全局变量和局部变量的多少来决定的。
  stack区:这个可以由使用都自行定义大小,但使用都要根据自已代码的情况,评估出一个合理的值,再定义其大小,如果定义的太小,很容易爆栈,导至代码异常,但是如果定义的太大,就容易浪费内存。
  heap区:RAM剩下的部分,编译器就会作为堆区使用。
  七、嵌入式代码一般启动过程
  以STM32为例,通过分析其汇编启支代码,大致可以分为以下几个步骤: 上电后,硬件设置SP,并PC指针指到ResetHandler; 运行硬件初始化代码,主要是配置系统时钟,这种代码有一个可靠的运行环境; 设置SP指针; 初始化data区域, 跳到main运行。
  如果大家想看编译扣,代码文件的组成,可以查看统后生的map文件,里面有详细的数据,包括各个函数的分配内存,BSS,Data,Stack,Heap,Text的分配情况。
  如果相要了解详细的代码启动过程,可看它的启动汇编文件。

日媒二手电动车难找买家,中国共享电动汽车坟场仍在增加来源环球时报日媒中国共享电动汽车坟场仍在增加日本FridayDigital网站11月23日文章,原题在中国,共享电动汽车坟场正在快速增加目前,中国是全球最重要的电动汽车市场。在20魅族一直叫好不叫座,究其原因是什么?败于P7。在16系列可以从新雄起时,没货,专卖店加价500,失去了口碑和市场,早早巴魅蓝砍掉,失去占领低端市场和用户,现在又只做旗舰,又巴魅蓝激活,魅族迷一样的操作,本身品牌力度不从中国联想到联想中国,国企到人人喊打私企,联想到底怎么了?答中国联想,一个好端端的国企优秀企业,一步步地脱变成了外资控制的私人企业,这是中国的悲哀和失败。联想以中国的广大市场为外国资本家输血和套取利益,联想的高管已经从优秀企业家脱变成了买联想真的叫人来联想不断,还有断头贷,为什么不给大众一个解释?联想事件不断发酵,真会使人产生较多联想,我觉若想平息此事,联想就应出面解释吃瓜群众以下疑问公布相关集团和各下属子公司股权结构,看国有股份占多少?联想想上科创板,请公布科技研发投入占买手机首看性能,2021年公认性能最强的三款手机现在买手机,首看性能,任你花里胡哨的东西再多,带不起来一样白扯,但是手机性能现在也不能光以处理器来看,毕竟现在的手机承载了人生活中大部分的工具用途,我们今天就从使用性能(处理器屏幕苹果8plus,老年人必备神器,性能不用担心,放在现在依然能打之前我不是发了一个文章吗?说老年人不应该用一些千元机,因为性能太差了,用不了几年就要换,然后很多朋友都说直接买一个二手的苹果手机,然后我就仔细的琢磨一下,看中了这款苹果8p,其实大经典MP3播放器换代重生,全新设计Winamp将公开beta测试据官网消息,经典的Winamp播放器将迎来重大更新,会进行网站和LOGO的重新设计,并会在近期发布Beta版本供用户进行测试。不知道看到这个界面有没有让你的思绪回到10多年前,你曾联想的产品好不好看到有人在网上说联想的产品做的不好,东西怎么怎么不好用,我不知道是不是有人故意在抹黑联想,还是确有这事。但我还是有点发言权的,因为我买过联想的手机。记得是09年了,那时候我的旧手机拼多多淘宝上便宜的衣服敢给宝宝穿吗,这些衣服大多有毒可能不少妈妈最近都发现了,随着抖音直播拼多多以及淘宝的发展,不少商家在售卖低价的童装,能以低价买到高质量的衣服当然是好事,但是就怕一些有毒的童装。有些家长可能就会认为,孩子在成长期视频拍摄装备这么多,simorr让我最喜欢要说短视频是当下最流行的大众娱乐方式,估计没有人会反对,毕竟各大短视频平台如雨后春笋呈爆发式增长,主播网红大行其道,视频记录生活已经成为年轻人的一种潮流和生活方式,太多的人将其作为盘点古人留下来的未解之谜,古代是否已经有外星人了?史前文明,外星文明已来史前文明肯定有,神话传说未必假,远古有外星人也不足为奇,要知道人类有史文明也不过一万年而已,就算从古猿算起也不过二三百万年,而地球生命演化已有至少38亿年了,
149官网买苹果12充电头是不是ZS税?用完这款后我有了结论作为手机界的标杆,Apple2020年推出iphone12,最大的瓜却不是手机本身有多惊艳,而是打着环保口号让消费者掏钱再买一个充电器。不过说到充电这事吧,相比于国内各手机厂商,苹魅族18为何敢成为国内首部三零机型?公司内部所有人的愿景随着魅族18系列的发布以及热销(首销当日一分钟全渠道销售额破亿,28分钟全渠道备货售罄),近期网友对于这个系列机型的讨论依旧十分激烈,尤其是关于该系列机型所承诺的三零保证。何谓三零京东跟电器大佬组局玩出新花样啦,品质消费大阵营引大牌跑步入场这几天,电器圈又搞事情了!打开微博,海尔华硕极米等电器大牌清一色都在电器放心购,品质送到家这一热门话题,纷纷京东发出互动海报,为京东最近在微博上发起的为消费者们奉上正品行货的倡议隔慢工出细活?魅族以静制动,走开了行业的另一条路如果把手机市场看作江湖武林的话,那么每个品牌就算是各自独立的一个门派,都有自己的独门秘籍,有的主攻速度,追求一个快,有的主张稳定,崇尚以静制动,所以说江湖武林和手机市场其实是有很多高通骁龙X65基带及射频系统打造面向未来的5G解决方案虽然现阶段全球经济增速在疫情的影响下有所放缓,但5G的发展速度还是超出了很多人的预期。5G的蓬勃发展离不开产业界的共同努力,日前,高通全新5G基带骁龙X65的问世为5G进程再添一把长安欧尚X7PLUS配置抢先看,五大全系标配,将于8月27日开启预售近日,长安欧尚X7PLUS产品配置首次全面曝光,新车全系标配新一代蓝鲸NE系列发动机,并推出1。5T6MT和1。5T7DCT两种动力组合共计9款车型,星灿红星辰白星际灰碧空蓝丹青蓝招募五菱少女新品发布官,宏光MINIEV马卡龙秋色将由用户发布近日,五菱官方宣布将于9月2日在长沙黄兴路步行街开启五菱少女潮妆派对大人们的小乐园活动,邀请美妆品牌完美日记一起潮玩出彩。今日正式面向用户启动五菱少女新品发布官招募,现场主持并发布第四代嘉华预售!东风悦达起亚将携焕新阵容亮相成都车展2021年8月29日,第二十四届成都国际汽车展览会将如期拉开帷幕。东风悦达起亚全球旗舰MPV第四代嘉华将在车展正式开启预售。同时,旗下智跑Ace凯酷(K5)傲跑等战略车型也将耀目亮成都车展新车抢先看荣威高性能运动轿车上市,让品质出行触手可及最具质感高性能运动轿车最舒适出行头等舱最高颜值改装车阵容全军出击,成都车展上汽荣威展台爆点满满等你来撩!新车方面,全新荣威i5GT将成展台的绝对主角。新车演绎更个性的数字律动设计语九号方糖机器人赋能智慧酒店,让送物更省心近日,上海国际酒店及商业空间博览会(简称上海酒店展)在上海新国际博览中心正式举办,九号公司携全新一代酒店配送机器人九号方糖参加此次展会,并为打造全新酒店智能体验提供了有效解决方案。焕新万千智慧家!三翼鸟一首RAP唱出用户生活6月4日,家住青岛市南区的空巢老人王爷爷,家里的浴室也摇身一变。洗澡前仅需一句话就能提前预约热水。洗澡时不仅可以随时一句话调整水温,而且还能边洗边听戏剧。洗完后地面还会烘干,防止湿