静态链接,静态分派,动态链接

简介: 静态链接,静态分派,动态链接

静态链接:

编译时即可确认要转换成哪个直接引用。

编译的时候由于能够确定变量的静态类型,所以编译时可知,也就是为什么叫做静态链接的原因。接下来解释下为什么能够确定变量的静态类型并且是怎么确定的。

首先明确一个点:静态类型和实际类型都是可以改变的。唯一不同的是静态类型的变化是通过强转实现的而java中又有对应的强转字节码来获取更改之后得变量的静态类型所以编译时是可以确定变量的静态类型的,但是实际类型需要根据运行时才能够进行确定(下面动态链接详细说明)。

静态链接发生的阶段其实也可以分为:静态分派和解析阶段

解析阶段就是将编译期可以确定不会发生变化的符号引用转换为直接引用。

有以下这些:

这些叫做非虚方法也就是运行时不会发生变化,编译期即可确定

而静态分派则是更改变量的静态类型,但是也可以确定编译时期不会发生变化。

(静态分派和动态分派的区别在于:静态分派是根据静态类型来确定调用的方法是哪个,而动态分配时根据变量的实际类型。由此可以得出静态分派在编译时就可以确定,而动态分派需要运行时)

典型的栗子就是方法的参数是根据参数的静态类型来决定调用哪个方法,重载就是利用的这点实现的,而调用多态则是根据变量的实际类型来确定的,

比如方法的重写。

而且当找不到对应的静态类型的时候在还会默认对静态类型进行转换。

动态链接

编译时不能确认转换成哪个引用要等到运行时才可以确认调用的是哪个方法。

动态链接是和变量的实际类型相关的,因为变量的实际类型不能够在编译时确定只能等到运行时才可以,比如某个条件成立就将这个变量转换为A,不成立转为B(前提这个条件的成立与否必须是运行时才可以确定的,不能够在编译时就能够确认比如if(true) ),这个条件的成立必须是运行时才可进行确定的不能够在编译的时候就知道其实际类型是什么。所以叫做动态链接运行时才可以确定。



目录
相关文章
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
101 21
|
开发者
静态链接与动态链接
空间链接使得不同的程序开发者和部门能够相对独立地开发和测试自己的程序模块,从某种意义上来将大大促进了程序开发的效率,原先限制程序的规模也随之扩大。但是慢慢地静态链接的诸多缺点也逐步暴露出来,比如浪费内存和磁盘空间、模块更新苦难你等问题,使得人们不得不寻找一种更好的方式来组织程序的模块。本文简单介绍静态链接与动态链接。
|
6月前
|
存储 程序员 编译器
静态链接详解
静态链接详解
|
存储 Unix 程序员
C程序运行对应的内存分布关系
C程序运行对应的内存分布关系
132 0
C程序运行对应的内存分布关系
|
搜索推荐 Apache SEO
如何把动态链接静态化?
这是SEO过程中最经常碰到的问题,也是必须解决的问题。因为搜索引擎喜欢静态页面。从Web服务器的角度,这个问题转变为:如何将静态化的文件名称转化成参数。 如何把动态链接静态化?需要两步来处理:
246 0
|
C语言 程序员 Linux