硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2503|回复: 3
收起左侧

[其它] 代码占用内存问题

[复制链接]

5

主题

10

回帖

25

积分

新手上路

积分
25
发表于 2019-3-20 22:52:23 | 显示全部楼层 |阅读模式
请教大家一个内存的问题,

比如 我定义一个 unsigned char A; 的全局变量, 程序编译完  应该是 RAM的 消耗 一个是 多了一个byte 吧!(这个应该没有异议!)

但有时为了 程序的可读性,会搞两个函数,比如

unsigned char get_A(void)
{
     return A;
}

void set_A(unsigned char val)
{
    A= val;
}

疑问:
1.  这样是不是 RAM 就多消耗 2 byte ?
2. 如果 void set_A(unsigned char val), 定义为 const void set_A(unsigned char val), 那是不是这个函数就不占用 RAM 呢?
3. 如果 再如下 定义 一个宏,   那么 这个宏 占用消耗 1个byte的 RAM 吗?
      #define  A_IS_TRUE    ( TRUE == get_A() )


谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2019-3-21 01:23:15 | 显示全部楼层
这个看编译器生成的map文件比较方便。
回复

使用道具 举报

5

主题

10

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-3-21 23:33:57 | 显示全部楼层
eric2013 发表于 2019-3-21 01:23
这个看编译器生成的map文件比较方便。

谢谢 楼主!

对比结果:

1.  定义多一个 函数 get_XXXX() 函数  内存 data 和bss 断没有增加,但是text多了一个,但不是 1byte 是 0xc

2. 将函数 定义为 const 和 非const  在map 上看不出差异~~~·

3. 使用 宏定义  函数 get_xxxx()  ,  定义和没有定义   在map 上也看不出差异
2019-03-21_231741.png
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2019-3-26 08:35:09 | 显示全部楼层
只有一个全局变量,总是一个字节吧,函数的返回跟参数是放在寄存器或者栈上的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 06:49 , Processed in 0.316501 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表