在微控制器编程上下文中的 C/C++ 中,我如何查看使用了多少内存全局变量(不计算新的/malloc 分配的数据)?
问问题
513 次
1 回答
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
) 表示我们在存储未初始化全局变量的数据段中。第二列是地址(通过与上面的比较我们可以看到它在 RAM 中。第三列 ( 0x94
) 显示了 使用的总大小main.cpp
,最后一列给出了源文件名和符号。
注意:初始化的“Plain Old Data”全局变量(例如int a = 1;
)将进入该.data
段,所以也看那里!(感谢 Paul)使用 C++ 构造函数初始化的变量仍然在.bss
. 无论如何都要检查这两个部分。
于 2014-07-25T12:35:49.523 回答