打印

关于代码占用内存问题

[复制链接]
1493|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suxilong|  楼主 | 2019-3-20 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家一个内存的问题,

比如 我定义一个 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() )


谢谢!

相关帖子

沙发
零三翟邢止胃| | 2019-3-21 09:34 | 只看该作者
帮你顶住吧!!!!!!

使用特权

评论回复
板凳
ayb_ice| | 2019-3-21 15:07 | 只看该作者
理论上不会多占用内存,只是可能会占用栈空间,但这要看编译器,有些编译器的局部变量不是通过栈分配的,此时可能占用内存

使用特权

评论回复
地板
suxilong|  楼主 | 2019-3-21 22:42 | 只看该作者
ayb_ice 发表于 2019-3-21 15:07
理论上不会多占用内存,只是可能会占用栈空间,但这要看编译器,有些编译器的局部变量不是通过栈分配的,此 ...

谢谢!

你说 不会占用  是  函数不会占用内存吗?

占用栈空间?  那是不是说 不调用就不占用 栈了?

那宏呢? 还要const 的呢?

使用特权

评论回复
5
ayb_ice| | 2019-3-22 08:40 | 只看该作者
suxilong 发表于 2019-3-21 22:42
谢谢!

你说 不会占用  是  函数不会占用内存吗?

函数本身只占用代码空间,一个函数只占用一份
,调用时返回地址会占用栈空间,局部变量也会占用栈空间

宏只是替换功能,取决于替换后的内容,
const只是表示不可修改,也取决于对象

使用特权

评论回复
6
iDiy| | 2019-3-22 09:39 | 只看该作者
先搞懂变量的生命周期吧

1、A是全局变量,占用一个字节。
2、没有这样的写法:const void set_A(unsigned char val),在set_A运行过程中会在栈空间分配变量,退出set_A之后自动释放分配的空间。
3、编译一般会将函数返回值放到某个指定的寄存器。不同的编译器不同的MCU体系结构,寄存器不一样。从全局来看,对于( TRUE == get_A() )不占用内存。

使用特权

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

本版积分规则

个人签名:没有最差,只有最懒

55

主题

339

帖子

4

粉丝