如何查看全局变量使用多少RAM?

时间:2014-07-25 12:27:03

标签: c++ global-variables microcontroller ram memory-consumption

在微控制器编程环境下的C / C ++中,如何查看全局变量使用多少内存(不包括new / malloc分配的数据)?

1 个答案:

答案 0 :(得分:3)

如果您使用gcc链接可执行文件/固件,则可以在命令行中添加选项-Map=memory.map

在该文件中,您将找到类似这样的内容,告诉您RAM的位置:

Memory Configuration

Name             Origin             Length             Attributes
FLASH            0x00014000         0x0002c000         xr
RAM              0x20002000         0x00002000         xrw
*default*        0x00000000         0xffffffff

注意RAM的地址(0x20002000)。稍后您将在RAM中找到全局变量的地址。地址的差异会告诉你他们的大小:

 .bss           0x20002924       0x94 C:/Users/...../main.cpp.o
                0x20002924                i2c
                0x20002934                ex1
                0x20002948                ex2
                0x2000295c                sensorI2C
                0x20002978                sensorSPI0
                0x2000299c                sdCard

第一列(.bss)表示我们在data segment中存储了未初始化的全局变量。第二列是地址(通过与上面的比较我们可以看到在RAM中。第三列(0x94)显示main.cpp使用的总大小,最后一列给出源文件名& the symbols。

注意:初始化的“普通旧数据”全局变量(例如int a = 1;)将进入.data段,所以也请查看! (感谢Paul)使用C ++构造函数初始化的变量仍然在.bss。无论如何都要检查两个部分。