【发布时间】:2023-03-23 21:35:01
【问题描述】:
我用 gnu arm-elf-gcc 编译了一些类型定义,标志设置为 -02 -g。在我使用 objdump 制作了一个 .lst 文件后,按照命令行选项设置 -s -S -D。
我在列表中找不到类型定义。不在 .text 或 .data 部分?
unsigned int state_0=0x6;
typedef unsigned char uc32;
typedef struct{
unsigned int mask;
uc32 id;
uc32 type;
unsigned int attribute;
} Pin;
unsigned int state=2;
void foo(void)
{
state=0;
state=1;
}
void foo_1(void)
{
Pin pin_1;
uc32 loop=4;
foo();
pin_1.mask=0x5;
state=0x07;
}
【问题讨论】:
-
编译时定义不会进入可执行映像中的部分它们不会“变成”代码或数据!!!
-
但字、半字、字节变量是在数据部分设置的。并且类型定义仅由编译器使用?如果我在代码中使用 typedefine 变量,不应该分配一些内存吗?
-
您在堆栈上分配
Pin,因此您不会在任何部分看到它 - 您只会在 .text 中将其视为“代码”。