计算机是如何通过变量名找到它的实际数据的?这个有关问题困扰小弟我很久
计算机是怎么通过变量名找到它的实际数据的?这个问题困扰我很久。
这个问题真的困扰我很久。
比如c语言代码:
int a=5;
计算机肯定是要把整数5放在内存中的某个位置,这个位置是怎么跟变量名a发生联系的。当程序要用到变量a时,是怎么找到它的值的。
这个问题真的困扰我很久,我是菜鸟,初来论坛,也没有悬赏的积分,但还是希望大牛能帮我解除疑惑。
------解决思路----------------------
暂时不用明白这个,,编译器的事情,编译的时候会把变量名转化为一个地址,地址中存放的数据5.程序运行的时候都是在找地址,不会出现变量名。变量名只是为了让你编程的时候方便,在计算机刚出来时,你想用变量名都不行,没有。只能用机器码。
------解决思路----------------------
首先要去看一下《数字逻辑和数字电路》,然后是《计算机组成原理》。
在这里你希望给你透彻的讲清楚是不太现实的。
------解决思路----------------------
------解决思路----------------------
确实想了解的话,学习编译原理吧,理解词法分析,语法分析,代码生成的过程。懂汇编的话,对理解这个会更有帮助。
------解决思路----------------------
肯定是的啊,,不然怎么办
------解决思路----------------------
这是汇编,机器组成原理,很深。先别急吧,后面就明白了
------解决思路----------------------
name lookup 把一个名字对应到一个实体上,后者映射到内存上,内存里存实际数据,这样名字就翻译成数据了。
这个问题真的困扰我很久。
比如c语言代码:
int a=5;
计算机肯定是要把整数5放在内存中的某个位置,这个位置是怎么跟变量名a发生联系的。当程序要用到变量a时,是怎么找到它的值的。
这个问题真的困扰我很久,我是菜鸟,初来论坛,也没有悬赏的积分,但还是希望大牛能帮我解除疑惑。
------解决思路----------------------
暂时不用明白这个,,编译器的事情,编译的时候会把变量名转化为一个地址,地址中存放的数据5.程序运行的时候都是在找地址,不会出现变量名。变量名只是为了让你编程的时候方便,在计算机刚出来时,你想用变量名都不行,没有。只能用机器码。
------解决思路----------------------
首先要去看一下《数字逻辑和数字电路》,然后是《计算机组成原理》。
在这里你希望给你透彻的讲清楚是不太现实的。
------解决思路----------------------
void main()
{
0043CCC0 push ebp
0043CCC1 mov ebp,esp
0043CCC3 sub esp,0D8h
0043CCC9 push ebx
0043CCCA push esi
0043CCCB push edi
0043CCCC lea edi,[ebp-0D8h]
0043CCD2 mov ecx,36h
0043CCD7 mov eax,0CCCCCCCCh
0043CCDC rep stos dword ptr es:[edi]
int m = 100;
0043CCDE mov dword ptr [m],64h //分配的地址是偏移为m的地址
int n = 12;
0043CCE5 mov dword ptr [n],0Ch
cout<<m + n<<endl;
0043CCEC push offset std::endl (439816h)
0043CCF1 mov eax,dword ptr [m] //使用的时候直接访问偏移地址为m的地址
0043CCF4 add eax,dword ptr [n]
0043CCF7 push eax
0043CCF8 mov ecx,offset std::cout (4C6E98h)
0043CCFD call std::basic_ostream<char,std::char_traits<char> >::operator<< (4399FBh)
0043CD02 mov ecx,eax
0043CD04 call std::basic_ostream<char,std::char_traits<char> >::operator<< (43A23Eh)
}
------解决思路----------------------
确实想了解的话,学习编译原理吧,理解词法分析,语法分析,代码生成的过程。懂汇编的话,对理解这个会更有帮助。
------解决思路----------------------
肯定是的啊,,不然怎么办
------解决思路----------------------
这是汇编,机器组成原理,很深。先别急吧,后面就明白了
------解决思路----------------------
name lookup 把一个名字对应到一个实体上,后者映射到内存上,内存里存实际数据,这样名字就翻译成数据了。