在微控制器编程环境下的C / C ++中,如何查看全局变量使用多少内存(不包括new / malloc分配的数据)?
答案 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
。无论如何都要检查两个部分。