变量名、函数名
来源:互联网 发布:手机音频变速软件 编辑:程序博客网 时间:2024/04/27 14:01
变量名、函数名
C程序在执行的时候直接用内存地址去定位变量、函数,而不是根据名字去搜索,所以C程序执行的速度比脚本语言要快不少。
对于函数中的局部变量来说,编译为汇编的时候,名字就已经被彻彻底底地忘记了,因为局部变量在函数帧中,这一帧要占多少字节,各局部变量在帧中的相对位置,都在编译成汇编的时候就可以确定下来,生成目标文件、可执行文件的时候也不需要再更改。
而 全局变量、static变量、函数 由于要将所有目标文件、库链接到一起之后才能最终确定它们的绝对地址,所以在链接前名字还是标志着它们的存在。它们的信息存储在符号表(符号数组)中,其中每一项除了有符号名,还有符号地址(链接后填入),所以 nm 命令可得到 地址-符号名 映射。虽然程序运行时用不到符号表,但是默认情况下可执行文件中还是存着符号表,看下面这个程序(name.c):
#include <stdio.h>int globalvar;int main(){ static int staticval; return 0;}
name.c 中有全局变量、static变量、函数(main),查看它编译后的目标文件、可执行文件的 地址-符号 映射:
[lqy@localhost notlong]$ gcc -c name.c[lqy@localhost notlong]$ nm name.o00000004 C globalvar00000000 T main00000000 b staticval.1672[lqy@localhost notlong]$ gcc -o name name.c[lqy@localhost notlong]$ nm name | sort08048274 T _init080482e0 T _start08048310 t __do_global_dtors_aux08048370 t frame_dummy08048394 T main...此处省略X行...08049604 b staticval.167208049608 B globalvar0804960c A _end U __libc_start_main@@GLIBC_2.0 w __gmon_start__ w _Jv_RegisterClasses[lqy@localhost notlong]$
可执行文件中的 地址-符号 映射还有什么存在的意义呢?它可用于汇编级调试的时候设置断点,比如linux内核编译后就生成了 System.map 文件,便于进行内核调试:
00000000 A VDSO32_PRELINK00000040 A VDSO32_vsyscall_eh_frame_size000001d3 A kexec_control_code_size00000400 A VDSO32_sigreturn0000040c A VDSO32_rt_sigreturn00000414 A VDSO32_vsyscall00000424 A VDSO32_SYSENTER_RETURN01000000 A phys_startup_32c1000000 T _textc1000000 T startup_32c1000054 t default_entryc1001000 T wakeup_pmode_returnc100104c t bogus_magicc100104e t save_registersc100109d t restore_registersc10010c0 T do_suspend_lowlevelc10010d6 t ret_pointc10010e8 T _stextc10010e8 t cpumask_weightc10010f9 t run_init_processc1001112 t init_postc10011b0 T do_one_initcall...
- 变量名、函数名
- PHP变量名、类名、函数名均可为变量
- 不一致的变量名和函数名
- JS变量名、函数名,区分大小写
- Python 变量作用域问题 函数名.变量名
- 【转】C/C++标识符(常量名、变量名、函数名、类名、文件名)命名规则
- 变量名
- 变量名
- 13、函数名和变量名的命名
- 标识符(函数名、变量名)的选择
- PHP大小写:函数名和类名不区分,变量名区分
- PHP大小写:函数名和类名不区分,变量名区分
- PHP变量名区分大小写,函数名不区分大小写
- PHP大小写:函数名和类名不区分,变量名区分
- PHP大小写:函数名和类名不区分,变量名区分
- PHP大小写:函数名和类名不区分,变量名区分
- PHP大小写:函数名和类名不区分,变量名区分
- PHP大小写:函数名和类名不区分,变量名区分
- 字符串的排列组合问题
- JavaScript专题——专题二 JavaScript语法
- Oracle 11g 新特性 – ACFS 说明
- 切换css样式表
- Java Web中Action与Action类(业务控制器)匹配(一)
- 变量名、函数名
- Contiki:初探
- 设置控件是否可见属性
- jQuery核心篇-移交$变量控制权
- AC自动机
- 用jquery 判断IE浏览器
- matlab 与 Delphi 混合编程
- 函数指针
- linux设备模型浅析