社区
C语言
帖子详情
嵌入式系统内存分配的若干问题
yinchao163
2017-03-08 03:48:23
背景:本人需要在一块DSP上运行复杂的算法,算法需要分配大量数组,由于不能使用外部SDRAM用来缓存数据,导致程序运行时内存不够而崩溃。
疑问:
1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量?
2. 程序能够通过编译,运行时为什么会触发写到ROM的保护?
3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式)
4. 节省代码段的长度可以提高内存使用率吗?
...全文
266
5
打赏
收藏
嵌入式系统内存分配的若干问题
背景:本人需要在一块DSP上运行复杂的算法,算法需要分配大量数组,由于不能使用外部SDRAM用来缓存数据,导致程序运行时内存不够而崩溃。 疑问: 1. 程序能够编译通过并正常运行的情况下,(尤其是大的数组赋值时)为什么会篡改其他的全局变量? 2. 程序能够通过编译,运行时为什么会触发写到ROM的保护? 3. 被注释掉的代码会占用系统运行时内存吗?(考虑后续开发的兼容性,代码段比较大,有许多扩展模式) 4. 节省代码段的长度可以提高内存使用率吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 ...
嵌入式Linux内存管理
嵌入式内存管理 被欺骗的C进程 每一个C语言的程序被执行起来的时候系统为了更方便开发人员操作,会给每一个进程分配一个虚拟的内存空间,它实际上是从处理内存映射出来的。虚拟内存的起始地址结束地址都是固定的,...
嵌入式操作系统---内存管理
争取对以下嵌入式操作系统的内存管理机制有一定的认识:1、uc/os上使用的内存管理机制2、典型值的内存管理机制3、基于伙伴算法的内存管理机制一、uc/os上使用的内存管理机制(一)基本原理首先将一块大的内存堆分为...
嵌入式系统
和嵌入式操作系统
嵌入式系统
和嵌入式操作系统 一 什么是
嵌入式系统
嵌入式系统
一般指非PC系统,有计算机功能但又不称之为计算机的设备或器材。它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、...
嵌入式系统
开发设计---
嵌入式系统
开发设计
嵌入式系统
设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章