4

在微控制器编程上下文中的 C/C++ 中,我如何查看使用了多少内存全局变量(不计算新的/malloc 分配的数据)?

4

1 回答 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 回答