js 全局变量量占用的内存有没有限制

Windows 驱动 全局变量 占用空间大小 有限制不 ?该如何解决 - 驱动开发当前位置:& &&&Windows 驱动 全局变量 占用空间大小 有限制不 ?该Windows 驱动 全局变量 占用空间大小 有限制不 ?该如何解决&&网友分享于:&&浏览:11次Windows 驱动 全局变量 占用空间大小 有限制不 ??貌似记得在哪边看到过,win驱动中函数的局部变量的内存占用不宜过大(∵驱动中堆上空间有限),如需要较大内存空间&应该在堆上申请。
那我想请问&,全局变量&的申请空间&有没有大小的限制啊??&例如这样的&全局数组&char&g_buf[?]&=&{0};&&能分配较大空间不?有大小的限制不??------解决方案--------------------没听说全局变量有大写限制,初始化过的全局变量放在PE的data节中,全局变量过大会导致编译后的sys文件较大,只要不超过虚拟内存空间,应该没什么问题。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有查看: 8859|回复: 15
STM32全局变量占用程序存储空间吗?
主题帖子精华
高级会员, 积分 709, 距离下一级还需 291 积分
在线时间0 小时
全局变量是否占用最终程序的存储空间,这个问题其实早在我们学习C语言的时候就已经告诉我们答案了。我隐约记得初学C语言的时候,书本上告诉我们:
全局自动变量——保存在读写数据段
全局静态变量——保存在读写数据段
全局常量——保存在只读数据段
局部自动变量——保存在栈空间里的
而我们在做单片机程序的时候,由于都是用的C编程,所以数据的存储也是一样的。上面的读写数据段在单片机里就是RW-data段,上面的只读数据段在单片机里就是RO-data,还有一个零初始化数据段ZI-data段(由此可见,RW-data加上ZI-data就是总共要分配的RAM空间大小),最后一个Code段就不用介绍了,大家都明白。
那么究竟一个STM32程序编译链接完成后的BIN文件大小到底跟所申请的全局变量有没有关系呢?答案是无关!最终生成的BIN文件大小只与程序的代码段(Code段)和只读数据段(RO-data)有关,即BIN文件大小=Code段+RO-data段。
为了验证这一点,我特地拿正点原子战舰开发板的案例《实验48 串口IAP实验》来给大家演示,证明目标代码的大小与程序中所申请的全局变量大小无关。选择正点原子的这个案例有两个原因:1.本人目前正在学习STM32 IAP编程;2.该例程中分配了一个全局变量u8 USART_RX_BUF[USART_REC_LEN],USART_REC_LEN的长度为55K,几乎占用了80%的SRAM空间,对本文的论点起着典范作用。
首先我们不对工程进行修改,如下图:
编译链接后,生成的目标代码结果如下:
可以看到,Program Size: Code=19208 RO-data=3036 RW-data=64 ZI-data=62400 &
得出ROM=21.7K &RAM=61K
我们再将USART_REC_LEN宏的长度修改为55,空间大大缩小,如下图:
编译链接后,目标代码大小如下:
可以看到Program Size: Code=19208 RO-data=3036 RW-data=64 ZI-data=6136 &
得到ROM=21.7K &RAM=6K
而两次编译后,我们到工程目录下找到IAP.BIN文件,查看该文件的大小,都是21.7K,如下图:
由此可见,目标代码的大小与程序中所申请的全局变量大小无关,而只与代码段(Code段)和只读数据段(RO-data段)有关,而全局变量的大小只会影响到占用SRAM的大小。那么既然最终的目标代码大小跟全局变量的大小无关,是不是目标代码就一点也不包含全局变量了呢?呵呵,如果不包含全局变量,那程序运行的时候就不知道全局变量在哪里啦!当然会包含全局变量啦,只是不是包含它们的存储空间,而是包含他们分配空间的信息,比如该全局变量的起始地址、空间大小、是否要用0初始化等信息,这样就只会占用目标代码非常少的空间。那全局变量又是在什么时候分配的呢?全局变量的分配是在程序复位中断执行后,进入main函数之前分配的。那么全局变量又是由谁来分配的呢?全局变量的分配工作在你的用户程序中是看不到的,它们是有开发环境提供的C运行时库提供的代码,是由链接器把他们嵌入到你的用户代码里的。
现在,对于变量的空间分配,你是不是更了解了一些呢?
主题帖子精华
初级会员, 积分 64, 距离下一级还需 136 积分
在线时间0 小时
主题帖子精华
金牌会员, 积分 1169, 距离下一级还需 1831 积分
在线时间6 小时
哎,我太喜欢用全局变量了~
主题帖子精华
高级会员, 积分 649, 距离下一级还需 351 积分
在线时间1 小时
吗啊额儿科额~!
具有资深STM32点灯技术,
主题帖子精华
中级会员, 积分 487, 距离下一级还需 13 积分
在线时间0 小时
回复【楼主位】hexiaolong2008:
---------------------------------
楼主你好
我看了你解答的问题&但是我以前看过一本书&和你的问题有点才冲突&
那本书上的讲解是这样的&STM32&的FLASH占用大小&应该是code&+RO-data+RW-&&也就是说&在所有的全局变量中&没有被初始化为0&的全局变量也占用了flash的空间&我认为是这样的&假如&RW-data不占用flash空间&哪么程序如何知道这个全局变量的初始值是多少?
另外&关于SRAM&&程序占用SRAM的空间&当然是RW-data+ZI-data了&这个是一致的&
也就是说&RW-data&即占用了&flash空间&也占用了SRAM空间&
我认为是这样的&&呵呵&不对的话&求拍砖.
主题帖子精华
高级会员, 积分 709, 距离下一级还需 291 积分
在线时间0 小时
回复【5楼】langwanglx:
---------------------------------
嗯,你说的对,后来在阿莫电子论坛也有人提出了同样的反对意见,经过实践证明,你的接结论是对的,我对原始博客进行了修改,你可以直接点击原文博客链接,里面有说明的。
主题帖子精华
初级会员, 积分 63, 距离下一级还需 137 积分
在线时间8 小时
回复【楼主位】hexiaolong2008:
---------------------------------
看了楼主的帖子,这知识我不懂,受教了,楼主,什么触发你研究起这个知识点的呀?
研究这个知识点有什么意义哇?请教下,因为我突然想到这个问题。
得之我幸,失只我命!
主题帖子精华
高级会员, 积分 709, 距离下一级还需 291 积分
在线时间0 小时
回复【7楼】yihui184:
---------------------------------
因为想对程序内部的内存分布能有个透彻的了解,所以就想到了这里。。。。
主题帖子精华
初级会员, 积分 112, 距离下一级还需 88 积分
在线时间21 小时
楼主你好,那你能不能继续说说局部变量呢?局部变量是如何非配空间会分配到哪里去
主题帖子精华
在线时间529 小时
主题帖子精华
初级会员, 积分 103, 距离下一级还需 97 积分
在线时间5 小时
主题帖子精华
中级会员, 积分 254, 距离下一级还需 246 积分
在线时间4 小时
主题帖子精华
新手上路, 积分 45, 距离下一级还需 5 积分
在线时间4 小时
你说的不对,code&和ro&rw&zi都是要烧写到flash中的,在设备启动后,内置的boot程序会依据分散加载机制,将rw&zi加载到sram区中。
主题帖子精华
高级会员, 积分 709, 距离下一级还需 291 积分
在线时间0 小时
回复【13楼】huzhongmoshui:
---------------------------------
嗯,你说的是对的,请看5楼。
主题帖子精华
初级会员, 积分 71, 距离下一级还需 129 积分
在线时间17 小时
你说的不对,code&和ro&rw&zi都是要烧写到flash中的,在设备启动后,内置的boot程序会依据 ...
你说的很对,就像普通PC上exe中即包含rw-data又包含CODE,否则加载exe后如何得知一些全局变量的初始值阿。一个道理。
主题帖子精华
初级会员, 积分 186, 距离下一级还需 14 积分
在线时间23 小时
不错我还是要顶一下
Powered by}

我要回帖

更多关于 js全局变量定义 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信