社区
C语言
帖子详情
嵌入式系统内存分配的若干问题
yinchao163
2017-03-08 03:48:23
背景:本人需要在一块DSP上运行复杂的算法,算法需要分配大量数组,由于不能使用外部SDRAM用来缓存数据,导致程序运行时内存不够而崩溃。
疑问:
1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量?
2. 程序能够通过编译,运行时为什么会触发写到ROM的保护?
3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式)
4. 节省代码段的长度可以提高内存使用率吗?
...全文
311
5
打赏
收藏
嵌入式系统内存分配的若干问题
背景:本人需要在一块DSP上运行复杂的算法,算法需要分配大量数组,由于不能使用外部SDRAM用来缓存数据,导致程序运行时内存不够而崩溃。 疑问: 1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量? 2. 程序能够通过编译,运行时为什么会触发写到ROM的保护? 3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式) 4. 节省代码段的长度可以提高内存使用率吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yinchao163
2017-03-08
打赏
举报
回复
代码烧录在ROM里没错,但是程序运行时,是不是需要加载到RAM里面才能运行呀?没听说过直接在ROM里面跑程序的
赵4老师
2017-03-08
打赏
举报
回复
代码可以烧到ROM中,变量才需要RAM
yinchao163
2017-03-08
打赏
举报
回复
感谢大侠的解答。关于1-3点的解答和我设想的是一致的。 关于第四点:深入一点讨论,在最初的内存规划时,系统应该是设定了几块固定好的区域分别用来作为存储代码段、静态和全局变量段、堆栈段的。而系统在上电运行时,代码必须拷贝到内存中并且使指针指向代码的第一条指令,程序才可以正确运行。 如果是被注释的代码,有可能由于链接的关系,最终不会被放入内存,这个没问题。但是...真正要运行的代码段毫无疑问是要放入内存的,所以,严格意义上来说,精简代码,然后手动缩小代码空间,是可以节约运行时内存的,当然了,这是我想当然,仅仅是推断,我自己没有这么做过。 恳请各位有经验的人士来不吝赐教。
自信男孩
2017-03-08
打赏
举报
回复
1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量? 答:应该是嵌入式的内存不足,申请大的空间,导致变量空间重叠; 2. 程序能够通过编译,运行时为什么会触发写到ROM的保护? 答:编译通过,只是用来检查语法,简单的逻辑问题,不会检查申请空间过大的问题,编译器也不会去做这些事情; 3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式) 答:被注释掉的代码,在编译时就不会进入目标文件和可执行程序里,所以也不会占用内存; 4. 节省代码段的长度可以提高内存使用率吗? 答:代码段长度与内存使用率没关系,建议申请大内存时,要小心,根据需要来,如果数据用不了那么大的空间,反而会降低内存使用率; 嵌入式对内存的使用是宝贵的,所以在定义数据结构时就应该注意
heronism
2017-03-08
打赏
举报
回复
按自己的理解答复下,请参考: 1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量? ——数组应该是全局的,可能是数组越界,检查下下标 2. 程序能够通过编译,运行时为什么会触发写到ROM的保护? ——运行和编译没关系,触发到写rom保护可能是使用了非法指针(指向保护内存) 3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式) ——注释掉无影响 4. 节省代码段的长度可以提高内存使用率吗? ——不可以,或者说意义非常有限,程序使用的内存与其大小无关(不考虑程序本身占用的内存)
嵌入式linux
内存分配
,嵌入式linux内核中常见
内存分配
1.原理说明Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示四级页表分别为:* 页全局目录(Page Global Directory)* 页上级目录(Page Upper Directory)* 页中间目录(Page Middle Directory)* 页表(Page Tab...
嵌入式Linux内存管理
嵌入式内存管理 被欺骗的C进程 每一个C语言的程序被执行起来的时候系统为了更方便开发人员操作,会给每一个进程分配一个虚拟的内存空间,它实际上是从处理内存映射出来的。虚拟内存的起始地址结束地址都是固定的,因此虚拟内存的布局都是一样。比如有三个进程 P1 P2 P3 ,他们虽然得到的物理内存是完全不一样,但是从进程的角度来看他们三个得到的内存确实一模一样的。 假设你正在使用的计算机实际物理内存只有 1GB 大小,而当前系统运行了三个进程,Linux 会将 PM 中的某些内存映射为三个大小均为 4GB 的虚拟内
嵌入式操作系统---内存管理
嵌入式系统
中的内存管理,主要用于实现内存的动态申请/释放;在嵌入式操作系统中,使用malloc/free这两个函数会产生内存碎片;并且这两个函数的执行时间存在不确定性;争取对以下嵌入式操作系统的内存管理机制有一定的认识:1、uc/os上使用的内存管理机制2、典型值的内存管理机制3、基于伙伴算法的内存管理机制一、uc/os上使用的内存管理机制(一)基本原理首先将一块大的内存堆分为
若干
个分区,每个分区...
17、
嵌入式系统
的内存管理
本文深入探讨了
嵌入式系统
中内存管理的重要性及相关策略,包括静态分配、动态分配和分区分配等方法,并分析了实时操作系统(RTOS)中的内存管理机制,如固定大小块分配器和内存池。文章还介绍了内存泄漏与碎片化
问题
的解决方案,以及创新的自我修复技术TOC-BISR。通过实际案例和最佳实践,帮助开发人员优化系统性能、稳定性和可靠性,同时展望了未来内存管理的发展趋势。
QT
嵌入式系统
设计
嵌入式系统
简介
嵌入式系统
简介
嵌入式系统
是现代社会不可或缺的一部分,它们广泛应用于工业控制、消费电子、医疗设备、汽车电子等领域。
嵌入式系统
与我们的日常生活息息相关,它们以不为人知的方式默默工作,为我们的生活带来便利。
嵌入式系统
的定义
嵌入式系统
是一种专门为特定任务而设计的计算系统,它不像通用计算机那样可以运行各种各样的应用程序。
嵌入式系统
通常有一个明确的功能,它们在有限的资源下运行,如处理器速度、内存和存储空间等。
嵌入式系统
的特点
嵌入式系统
具有以下几个主要特点,专一性。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章