📄 subject_42017.htm
字号:
<p>
序号:42017 发表者:丁伟锋 发表日期:2003-05-30 23:57:43
<br>主题:变量名(变量的标识符)或函数名(函数的标识符)到底是什么。
<br>内容:变量名(变量的标识符)或函数名(函数的标识符)到底是什么。<BR>他们在计算机内部是怎么表示的。<BR>假如定义了 int a = 1;<BR>那么计算机内部肯定有一块内存空间,里面的值是1,我们在程序中<BR>可以通过标识符a来访问这块内存空间。如a=2就把这块内存空间的<BR>内容变成了2。我想知道的是这个标识符a的信息是怎么存储的呢。<BR>我们使用a=2,计算机就可以知道我们是访问a这个内存空间,而不是<BR>访问另一块内存空间呢。它跟我们通过a的地址访问有什么区别。<BR><BR>假如是一个函数呢?又是怎么来访问这个函数的呢。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:擎天柱 回复日期:2003-05-31 08:04:58
<br>内容:找一本编译原理方面的书看看吧!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:zhang2003 回复日期:2003-05-31 12:10:34
<br>内容:变量名(变量的标识符)或函数名(函数的标识符)到底是什么。<BR>他们在计算机内部是怎么表示的。<BR>假如定义了 int a = 1;<BR>那么计算机内部肯定有一块内存空间,里面的值是1,我们在程序中<BR>可以通过标识符a来访问这块内存空间。如a=2就把这块内存空间的<BR>内容变成了2。我想知道的是这个标识符a的信息是怎么存储的呢。<BR>//编译器不为A分配存储空间,它负责将A与一个地址对应起来<BR>我们使用a=2,计算机就可以知道我们是访问a这个内存空间,而不是<BR>访问另一块内存空间呢。它跟我们通过a的地址访问有什么区别。<BR><BR>假如是一个函数呢?又是怎么来访问这个函数的呢。<BR>//函数标识也是同样道理<BR>用指针只是给予程序员的方便<BR>//编译器将指针变量与一块内存联系在一起,该内存存的是一个地址<BR>//编译器知道这个事实<BR>//它会正确地编译
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:丁伟锋 回复日期:2003-05-31 22:13:21
<br>内容:我在用汇编写一个C++的类。C++编译器为类产生一个vtable,vtable存放的是指向函数的指针,然而在汇编中这些要自己来实现。我看了别人的一个程序。他在数据段中定义了一个vtable,如下<BR>.data<BR>MyVtbl VTABLE_STUC < Fun1,Fun2,Fun3><BR><BR>.code<BR>;下面是函数的实现<BR>Fun1 PROC<BR> ret<BR>Fun1 ENDP<BR><BR>Fun2 PROC<BR> ret<BR>Fun2 ENDP<BR><BR>Fun3 PROC<BR> ret<BR>Fun3 ENDP<BR><BR>如果vtable中是函数的指针的话。为什么不写成<BR>MyVtbl VTABLE_STUC <offset Fun1,offset Fun2,offset Fun3><BR><BR>这两种写法是不是等价的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zhang2003 回复日期:2003-06-01 13:05:25
<br>内容:丁伟锋:<BR>下面是我个人的观点,没有证实<BR>两者不定是等价的,因为MyVtbl VTABLE_STUC < Fun1,Fun2,Fun3>经过编译器处理后是什么样我不知道,如果处理后形式不变,那么两者很可能等价(这依赖于编译器能否识别MyVtbl VTABLE_STUC <offset Fun1,offset Fun2,offset Fun3><BR>这种表示方式)<BR>FUN1等只是一个标识符,是给编译器用来识别的,我们用地址不方便当然用标识符方便了,我没学过汇骗原理,可能编译器用一个映射表建立了标识符与地址间的联系<BR>请指教
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -