zoukankan      html  css  js  c++  java
  • 函数名定址

    综合研究2

    之函数名定址

    研究过程:

    通过之前的研究学习,我们得出了这样一个结论,函数名即汇编语言中的标号,标号则就应该具有地址的属性,但就本质而言,无论是地址,还是数据而言,都其实应该是一个概念,以及针对于他们,同样的要有这样的一个问题要问:

    1. 地址在哪?
    2. 数据(地址)有多大?

    这是在学习汇编语言的时候我们应该关注的一个重要问题,只有掌握了这两点才算是对数据本身以及内存有了一个清晰的认知。那么映射到C语言中来,第二个问题就变成了这样:数据类型是什么?

    那么对于函数名而言,我们同样要问这个问题,我们之前在进行汇编程序设计的时候,通常的我们只关注标号的偏移地址,以至于容易导致我们容易忽略这样一个事实:无论是变量,还是标号,本质属性是都是有其物理地址的!

    所以这个研究的任务是让我们认识到上述问题所在。

    研究任务让我们能够输出函数名的段地址和偏移地址。

    开始的时候并没有认识到事物的本质特征:即对于一个函数名,或者称之为标号而言,我们并没与认识到,它本身就同时具有段地址和偏移地址这样的一个属性,或者说的更清楚的一点,就是,它是有数据类型的的!!!,而且,段地址和偏移地址共8位,它是一个长整形数据!!

    认识到这一点问题就变得很容易了

    我使用了这样的语句:printf(“%lx ”,(long)f1)

    发现最终在屏幕上显示了一个8位16进制数,高四位表示其段地址,低四位表示其偏移地址。

    同时我们仍可以得到之前已经得到的结论:1fa并非是main函数的偏移地址,而是第一个函数的偏移地址。

    已解决问题:

    那么,新产生的问题在于:开头处定义的全局变量a是否对标号地址有影响?

    如果把全局变量a变成每个函数内部的局部变量,又会有什么不同?

                          

        图1  a为全局变量                     图2  a为局部变量

    从实验结果中,我们可以看到,是否定义全局变量对第一个函数名的地址没有影响,但是如果换成了局部变量,则对于后两个函数名的偏移地址产生影响。

    未解决问题:

    暂无。

    感想:

    在汇编中,我么关注数据的地址和数据的大小,在C语言中我们同样关注这个问题,只不过,我们换成了关注数据的数据类型,仅此而已,而其本质并无多大区别。

  • 相关阅读:
    185. [USACO Oct08] 挖水井
    JavaEE Tutorials (9)
    vjudge A
    HDU 2089 不要62
    国庆 day 2 下午
    国庆 day 2 上午
    国庆 day 1 下午
    P2899 [USACO08JAN]手机网络Cell Phone Network
    洛谷 P1690 贪婪的Copy
    洛谷 P2209 [USACO13OPEN]燃油经济性Fuel Economy
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/8012995.html
Copyright © 2011-2022 走看看