微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于static全局变量

关于static全局变量

时间:10-02 整理:3721RD 点击:


在DSP的C编程中,定义的static全局变量,为什么在.map文件里看不到分配空间?static全局变量是动态变量还是静态变量?

如果是静态,为什么在.map文件里没有分配地址?

static 变量的
1,作用域为整个文件,
  或是{....}之内
2,它的生命周期为整个程序的生命周期。

关于你的这个问题:
这个变量名在编译的时候被编译器变换了变量名。

试想,如果在两个.c文件中都存在以下定义:
A.c中
static int jj;

B.c中
static int jj;

如果编译器,定义了一个变量名为 jj, 那这个jj究竟是A.c还是B.c的,
这时,编译器就会使用一个技巧,就是给他们名字扩展,比如:

A.c 中的jj, 改为了 jj_A
B.c 中的jj, 改为了 jj_B
所以,变量还是存在的,只是被改名了,你仔细再看一下map

我是在一个文件的开始定义了一个static全局变量,则这个变量的作用域只在该文件内,而其它文件内也没有与之同名的变量名,编译后在.map文件中看不到为该变量分配地址。

谁来解释?

事实上,即使不存在重名的static变量名,编译器都会将其改名。我手边没有环境,没法试,你可以用一下方法来找一下:

1,比方定义了一个static 变量:
statc int jj;

2, 取得该变量的地址,如在函数中
int * p_jj;
p_jj= &jj;
单步跟踪得到jj的地址。

2,利用得到的地址,去由工程生成的 .map文件中看该地址究竟分配了什么变量名。
.map中的格式如下:
address name
-------- ----
00000000 ___data__
00000000 ___edata__
00000000 edata
00000000 .data
00000400 __STACK_SIZE
00000880 _DevEmuRegs
00000a80 _FlashRegs
00000ae0 _CsmRegs
00000b20 _XintfRegs
00000c00 _CpuTimer0Regs
00000c08 _CpuTimer1Regs

另外,我还有一个怀疑,是不是该变量被编译器优化掉了。

我怀疑是不是变成了动态地址?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top