打印
[经验分享]

C51的内存分配与优化

[复制链接]
楼主: tabmone
手机看帖
扫描二维码
随时随地手机跟帖
41
根据函数参数的实际使用情况,优化参数传递方式,如使用值传递或引用传递。

使用特权

评论回复
42
macpherson| | 2024-8-20 09:15 | 只看该作者
全局变量占用Data区,尽量使用局部变量并通过参数传递来减少内存占用。

使用特权

评论回复
43
adolphcocker| | 2024-8-20 12:17 | 只看该作者
尽量使用局部变量而不是全局变量,因为局部变量占用的内存可以在函数返回后被重用。

使用特权

评论回复
44
rosemoore| | 2024-8-20 17:11 | 只看该作者
使用#pragma指令:可以使用#pragma指令来指定变量的存储类型,例如#pragma ioport用于I/O端口,#pragma small用于指定变量为small模式等。

使用特权

评论回复
45
wengh2016| | 2024-8-20 17:51 | 只看该作者
利用编译器的优化选项,如Keil C51提供的不同级别的优化(如-O1, -O2, -O3),可以自动进行一些优化。

使用特权

评论回复
46
51xlf| | 2024-8-20 19:52 | 只看该作者
8051单片机的内存分为几个不同的区域:

Code (程序存储区):用于存储程序代码。
Data (内部数据存储区):分为直接寻址区和间接寻址区,用于存储全局变量和静态变量。
IData (内部间接寻址区):用于存储通过间接寻址访问的变量,速度快但容量有限。
XData (外部数据存储区):用于存储大量的数据,但访问速度较慢。
PData (分页外部数据存储区):介于IData和XData之间,用于存储中等大小的数据。

使用特权

评论回复
47
yangxiaor520| | 2024-8-20 19:54 | 只看该作者
8051内核的RAM只有10多KB吧

使用特权

评论回复
48
jtracy3| | 2024-8-20 20:32 | 只看该作者
在不同的操作系统或开发环境下,C51的内存分配和优化策略可能有所不同,需要根据实际情况调整。

使用特权

评论回复
49
lihuami| | 2024-8-20 22:31 | 只看该作者
对于布尔类型或单个位的状态,使用位变量(使用bit关键字),可以节省空间。

使用特权

评论回复
50
uiint| | 2024-8-21 11:56 | 只看该作者
程序存储器(ROM/Flash)‌:用于存储程序代码和常量数据。这部分内存通常是只读的,用于存放编译后的机器码和常量数据。

使用特权

评论回复
51
pixhw| | 2024-8-21 12:54 | 只看该作者
避免在循环中声明不必要的变量,减少内存的额外占用。

使用特权

评论回复
52
lihuami| | 2024-8-21 13:15 | 只看该作者
尽量使用寄存器变量(使用register关键字),因为它们存放在内部RAM中,访问速度最快。

使用特权

评论回复
53
uptown| | 2024-8-21 15:54 | 只看该作者
尽管高128字节的地址与SFR相同,但由于采用不同的寻址方式,这些地址仍可以用于存储变量。

使用特权

评论回复
54
hudi008| | 2024-8-21 18:10 | 只看该作者
过多的全局变量会消耗大量内存,尽量将变量的作用域限制在必要的范围内。

使用特权

评论回复
55
kkzz| | 2024-8-21 22:26 | 只看该作者
SMALL模式:适用于小体积的程序,变量存储在直接寻址的内部RAM,即低128字节内。
COMPACT模式:当变量大小超过128字节而不超过256字节时使用。
LARGE模式:适用于大体积程序,变量被存放在外部存储器或者使用间接寻址的内部RAM。

使用特权

评论回复
56
vivilyly| | 2024-8-22 08:01 | 只看该作者
合理安排程序的结构,使得相关的操作集中在相同的内存页,减少页面切换的时间损耗。

使用特权

评论回复
57
fengm| | 2024-8-22 10:43 | 只看该作者
根据程序需求合理划分内存分区,如代码区、数据区和堆栈区等,以确保各部分之间的内存不会相互干扰。

使用特权

评论回复
58
vivilyly| | 2024-8-22 11:08 | 只看该作者
将经常使用的常量定义为宏或常量,避免重复声明。

使用特权

评论回复
59
qiufengsd| | 2024-8-22 11:37 | 只看该作者
通过修改链接器的脚本文件来优化输出的内存布局,减少内存的碎片化。

使用特权

评论回复
60
benjaminka| | 2024-8-22 12:07 | 只看该作者
使用最小的数据类型来满足需求,例如使用char代替int。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则