【发布时间】:2013-10-07 06:43:36
【问题描述】:
在我的项目中,我定义了:(这不是真正的代码 - 用于抽象目的)
typedef struct {
...
} my_struct;
在我声明的某个 C 文件中:
my_struct my_struct_inst;
在其他 2 个 C 文件中,我通过声明使用该结构:
extern my_struct my_struct_inst;
并使用了它的内容。
我使用 RVCT2.2 将该代码编译到 ARM 并试图找到该结构的地址:
1) 内存何时分配给 my_struct_inst?在编译时间?在运行时?
2) 在反汇编中,我可以看到在.FLASH_RAM 部分(可能属于此类数据的位置)有一些参考,例如:
my_struct_inst % 0x190
我通过 IDA 得到了它。这是什么意思? (该结构实例将从.FLASH_RAM 部分开头的偏移量 0x190 开始?)
3) 当我写 my_struct_inst.some_member 时,实际地址(结构实际位于内存中的位置)是如何被访问的(我应该阅读一些 ABI 文档吗?)
【问题讨论】:
-
写一些 C 语言“&my_struct_inst”,编译成汇编并查看代码。
-
你的意思是在运行时打印实例的地址吗?
-
这就是我的意思。我认为这回答了 3),但也许我误解了你的问题。
-
my_struct_inst % 0x190表示my_struct_inst的大小为0x190字节,其内容未初始化。 -
谢谢@IgorSkochinsky-您的意思是Jitesh回答时在编译时分配了0x190字节? (所以在精灵本身有 0x190 字节为它保留?或者它只是一个说 my_struct_inst 有 0x190 字节的 enrty,如果它会被使用,内存将在运行时分配给它?)