从32位平台移植到64位平台的解决方案
一、概述
1.移植的原因
由于高性能服务器、数据库管理系统、电脑辅助设计工具以及数字内容创作工具等应用方案均需要处理大量数据及占用存储器大量地址 因此为了满足这类应用方案的需要 64位技术便应运而生。
大约从九十年代后期起,就已经有64位机器问世,从去年到今年,Intel体系结构的芯片也开始出64位了.在UNIX环境下,已有几种操作系统支持64位环境了,据说微软也准备将Windows升级为64位操作系统。可以预料,将来32位平台将不再是主流,唱主角的将是64位平台。到时,客户环境也将全是64位平台。
因此,由于下面这样一些原因,使得某些应用程序从32位移植到64位:
(1) .工程、科学、商业---需要地址空间大于32位
.大数据集:需处理的数据大于32位所能处理的极限; (大文件或数据库的内存映射是一种常用技术---通过把文件或数据库保存在内存,以避免经常的磁盘I/O操作. )
.计算需要
1.程序复杂性;若是32位系统,32位程序,则虽然也能处理需大地址空间的应用,但程序将变得复杂;
2.应用程序的吞吐量;SMP系统与并行编程不断用来处理科学计算与其他问题;这意味着,在32位系统上,多至12个高速处理器共享不超过4GB的内存;64位系统则能为每个进程提供必要的内存与I/O资源,使得SMP能很好地进行扩展,并能提供科学,工程,商业领域所需的批量计算;
3.典型的64位应用---决策支持、数据仓库、数据挖掘、基于因特网的应用、
电子商务应用、 Web服务器、多媒体服务器、数字密集的应用、一般数据库、大阵列操作应用.
(2) .现存32位系统---资源短缺限制了总体性能与吞吐量的提高
现存32位多用户系统性能不是受限于CPU,而是受限于I/O带宽;而由分页引起的I/O又主要是由于内存不足于存储整个文件;如果有足够的内存可用,那么将显著减少分页,从而显著地改善系统性能.
.高压力环境下的32位应用程序:基于因特网的应用、电子商务应用、Web服务器、多媒体服务器、一般服务器、实时系统. (这些应用可从OS提供的大内存获得性能提高,因为OS会自动地为每个32位应用提供更多的内存与I/O资源.
因此, 64位系统能运行更多的并发的,大的32位应用程序.
2.移植原则i.移植后的程序既可作为64位机器上的32位程序运行,又可作为64位机器上的64位程序运行;只要觉得有需要,就可将32位程序重编译为64位程序;ii.在64位平台上,不管是作为32位程序还是作为64位程序运行,其性能至少不应比32位程序在32位平台上运行的性能差;iii.32位进程与64位进程可同时在64位平台上运行.
3.移植步骤
资料Wor d
将现有32位程序移植到64位时,由于AIX V4.3本身对32位程序与64位程序的支持,所以绝大部分的系统调用与C语言程序结构都不用改变,只要在源程序中遵守系统调用接口与相应的数据类型;但是,还是有一些由于数据类型长度的改变而引起的兼容性问题.因此从32位程序移植为64位程序一般必须经过下列步骤:
(1) .源程序的兼容性检查;这一步主要检查由于数据类型长度改变而引起的兼容性问题;
(2) .将从第(1)步检查出的兼容性源程序进行修改;
(3) .修改makefile文件;
二、 32位平台与64位平台
1.平台的定义
计算机系统是由硬件与软件两部分组成的。所谓平台也就是指硬件与相应的系统软件(包括操作系统、编译器和与开发环境有关的应用程序(如数据库) ) 。
64位硬件体系结构是指:
(1) .能处理64位数据.---即CPU可以将64位数据作为基本单元进行处理(只需一次操作就可处理) , ”字长”是64位的即存储单元是64位的. (说明:32位平台的存储单元是32位的)这导致结构成员的一种以8字节为边界的填充,即第一个成员即使不足一个8字节的基本存储单元,那么仍占用一个基本存储单元,而整个结构占用的存储空间也是8字节的倍数.
虚地址概念并不是由处理:包括有效地址和物理地址.注意(2) .能产生64位地址.----器体系结构说明的,它是由A I X的VMM(虚地址存储管理器)说明的.它规定了应用程虚地址可以与有效地址或物理地址不同.
一般来说,序可访问的内存空间的大小.相应地,32位硬件体系结构是指(1) .能将32位数据作为基本数据单元进行处理; (2) .最多只能产生32位地址(包括有效地址和物理地址) .下列操作可从64位寄存器中得到好处:
(1) .64位长的串; (2) .64位寄存器上的移位操作; (3) .64位的整数和指针运算; (4) .串或大数据的拷贝.
硬件部分主要是指其字长-----CPU能作为基本数据单元处理的二进制数据的位数。如32位机器其CPU能在一条指令内处理32位数据,它不能在一条指令内处理64位数据,它必须将64位数据分为两个32位数据进行处理;而64位机器其CPU则能在一条指令内处理64位数据,它不需象32位机器一样,将64位数据拆分为两个32位数据进行处理。
32位平台是指其硬件体系结构是32位的,而且其操作系统、编译器等系统软件也只能支持32位程序.
64位平台是指其硬件体系结构是64位的,而且其操作系统、编译器等也能支持64位程序.因而, 64位平台能充分利用其64位硬件的性能,使得一些应用程序能从中得到性能的改善.
2.现有AIX64位平台的特点i.RS/6000 64位机器
AIX V4.3和RS/6000 S70模型)RS/6000 (RS64A)是64位体系结构,CPU的通用寄存器是64位的,一些控制寄存器也是64位的,它可以一次移动或操作64位数据,而不需要象在32位处理器那样,必须由程序员或编译器分两次完成.
PowerPC是64位体系结构
资料Wor d
.64位环境是32位环境的超集;---即64位指令集是32位指令集的超集,换句话说,32位指令集是64位指令集的子集;
,即一个32位进程其环境只对这个进程有效位环境与.3264位环境是局部的;---一个64位进程的环境只对这个64位进程有效;同时运行的32位进程与64位进程可有不同的运行环境;
.不管哪种方式,都无任何模拟或仿真.----即32位进程执行32位指令集,64位进程;位指令集来模拟或仿真位指令集是通过32位指令集;而不是说,64执行64AIX V4.3 64位体系结构的好处
(1) 64位数据类型 某些应用程序可从64位整型硬件的性能和更高的精度获益;不过主要的可能还是由非64位应用程序用64位整型运算操纵64位指针.
(2)存取大文件---数据仓库、科学和多媒体应用经常需要非常大的文件和文件系统,它们很容易由64位数据类型处理;
34巨大的地址空间---有些应用程序既需要用大内存(2=16GB) ,也需要访问海量8 0虚拟存储(2) ,许多科学应用就可以简单地编程,并能比较高效地执行.数据段和堆栈都是巨大的,存储映射也会得到显著改善.ii.AIX V4.3支持64位程序的操作系统
①提升了4GB的系统内存限制
32;平台的限制32位PowerPC` .4GB(2 )是对;
的内存.AIX V4 .3 支持>4GB; 内存RS/6000 S70服务器上支持 16GB.AIX V4 .3在;会自动扩展至大内存当内存足够时 ,AIX . ;
的内存位程序仍受限于 <4GB.32;
的内存位程序每个都有至多4GBS70上,可有多个32 .在; 的内存位的应用程序可充分利用任何>4GB换句话说,一个大的32.
60 . 的内存位程序可存取.642 B4GB
应用程序地址空间可大于.
;位的程序且安装AIX V4 .3的系统上被编译为64 .在S70 .
位寻址范围的应用程序.对超出32②不必为担心性能而重新编译
因为这会任, ,将32位程序重新编译为32位时其性能会无任何差别64.在位平台上, ;
何编译器的改进;会看到些微的性能差别.32位重新编译为64位时, .
位可执行程序.默认编译模式是产生32;位扩展位平台上有附加的64位③ AIXV4 .3核心是32,在64;位的为支持完全 64位功能,核心不一定要求是64. ; .32位核心维持对32位的兼容性和健壮性; .核心扩展提供了位程序所要求的功能64 (AB I) ;新的应用程序二进制接口 . ; .提供了对设备驱动程序的二进制兼容性
;
位进程地址空间 .VMM支持64) ;如文件和内存操作( 64, .只要有必要某些系统调用可修改为位参数..对某些设备驱动程序有一些前提或限制
资料Wor d
④32位与64位进程的完全互操作性
1.进程---进程.可共享文件.内存, IPC资源(但要注意某些共享内存的分配方式---字节边界问题) ,也
可相互发信号;
.可相互exec( )调用;
;位进程可设置非本类进程的限制位与64.322.32位与64位系统结构
.编译器仍是32位的;
.编译器既可在32位平台,也可在64位平台上运行;
.既可产生32位,也可产生64位可执行文件.
.头文件已被修改过,以支持两种环境;
.增强了功能的共享库的体系结构.
.两种环境下都用同样的路径;
.只维护单一的源程序,makefile文件,
.管理共享库的工具默认为32位的.
32位与64位核心支持⑤.AIX V4.3既支持32位的虚地址空间又支持64位的虚地址空间;.包含VMM与进程调度和其他功能;
.32位进程与64位进程对系统设备都有同等访问权利;
.默认行为都是32位兼容的;
.进程调用设备驱动程序一般被核心分隔.
能在32位机器上运行64 位程序吗?⑥ .显然不能;
.不过,在32位机器上编译与链接64位程序是可能的(假如相关的库等等已安) .装⑦AIX命令与工具; 32AIX .绝大多数命令与工具仍是位的;位的绝大多数工具也仍是需支持.6432位的
;
32. 所有命令与工具将继续支持位) . :位的这并不意味着二者是64注意位的编译器与连接程序支持.64 (原有ii.3264位程序的二进制兼容性程序与新的.
中继续作为即可在位程序可不用重编译原有32,AIX V4.332位程序运行(1) .在AIX V4.3中, 32位程序完全的二进制兼容性;
.现存32位程序毋须修改或重新编译,就可在64位平台上运行;
.32位模式下,百分之百的兼容性;即在64平台上编译的32位程序与32位平台上编译的32位程序都可在64位平台上共存运行;
.32位程序无任何性能下降,即32位程序不管是在32位平台上运行,还是在64位平台上运行,其性能无可分辨的差别.
. (2) . 64位与32位的共存
.AIX V4 .3在64位平台中提供两种应用环境;这两种应用环境是互补而非竟争的环境;64位环境是向上兼容的AIX的附加,比AIX V4.3低的版本不支持64位程序;并不强迫所有应用都是64位的.
.仅仅只有一种AIX产品既适应于32位平台,又适应于64位平台;
资料Wor d
位进64,又可运行64位平台上既可运行32位进程32位与64位进程的完全共存,在;
两种进程各有自己的运行环境程,
3.64位编程i.标准系统协议.前者说明UNIX有关64位编程有两个标准,UNIX98标准与LP64, ,各库函数接口并不隐含数据类型是32位的调用与C标准库函数的标准接口.位编程C语言类型IPL32而是依协议确定其类型;后者说明64 1.数据类型标准 LP64类型
位程序相应的这三种数据类型与32:LP64模式中,char,short,int从上表可看出,long位程序中,相应地在3264数据类型完全一样;而long型与指针则变成位用的是,AIX位程序数据类型标准;不过与指针是32位的.LP64是一个一般的64:
见下表IPL32+long long int; Table 6. ILP32, LP64 and C forAIX Compiler Model Type SizeC forAIX Datatype(32-bit / LP64 (size in bit) ILP32 (size in bit)64-bit)Implementedchar 88Implemented 1616short
Implemented32int 32
Implemented 3264 long
64 / 64 Not DefinedNot Definedlong long
Implemented pointer 6432Implemented32 32float
Implemented6464 double
64 or 128 / 64 or 128 longdoubleNotDefined Not Defined(1)Fixed-width typeNotDefinedint8_tNot Defined(2)
8 bits (1 byte)uint8_tFixed-width type Not Definedint16_t Not Defined(2)
16 bits (2 bytes)uint16_t Not DefinedNot Definedint32_t Fixed-width type (2)
32 bits (4 bytes)uint32_tFixed-width type Not Definedint64_t Not Defined(2)
64 bits (8 bytes)uint64_tFixed-width type Not Defined__int8 Not Defined(3)
1 byte__uint8Fixed-width type Not DefinedNot Defined__int16 (3)
资料Wor d
:
说明兼与Microsoft,AIX为使其C++其中粗体部分表明在32位与64位程序中长度有异这包括,数据类型UNIX环境下一般应使用ANXI C,使用了__int8/16/32/64数据类型,在容.中在头文件<inttypes.h>与指针两种数据类型的长度不:long位程序与32位程序最大的不同就是很明显, 64序程32位着不同.在长义的数据类型其度也跟定当同,然那些由long间接位64;但在中,int ,long ,pointer三种数据类型的长度是一样的;三者相互赋值不会有影响的数据类typedef而且有些由long而long,pointer长度却有8B,程序中,int长度只有4B,long ,特别是有些由long或pointer之间赋值就会导致错误型也是8B,从而在int与无疑会导致如果相应参数在程序中被定义为int,typedef的数据类型常常用作函数参数, .
兼容性问题2. .结构分配问题
即一个结构的第一个:结构数据有一种位程序中,字边界填充的定位问题我们知道,在32也会分配一,成员一定位于字边界上,即使该成员实际占用空间并不需要一个字长的存储空间;并且整个结构所占空间也应位于字长边界上,剩余空间由编译器填充;个字长的存储空间struct struc32{如int I;long j ;char c;
} ;
4但也分配其最后一个成员虽只有一个字节,这个结构长度是12B,即sizeof(struc32)=12; ;
个字节; ,而是以双字为边界也存在结构填充问题;只不过不是以字为边界位程序中同样地,在64,struct struc64{如int I;long j ;char *p;
} ;
4B,24B;第一个成员只占64在位程序中,其长度是,在32位程序中这个结构的长度是12B, .空间8B但编译器也给它分配;其长度也会不同, ,位程序下某些结构只成员一样,但成员位置不同时64:值得注意的是在如struct li{long la;int ia;
} li;struct lii{
资料Wor d
long la;int ia;int ib;
} lii;struct ili{int ia;long la;int ib;
} ili;
注意ili与lii两个结构变量:在64位程序中,sizeof(structlii)=16;sizeof(structili)=24;
在64位程序中,对结构成员的恰当排列,有可能减少程序所占空间.ii.OBJ文件格式
1.定义 在32位程序中,经过编译器编译生成的.o文件,一般是COFF格式(CommonObjectFormatFile) ,但AIXV4.3为支持64位程序,其.o文件格式为XCOFF(extendedCommon Object Format File) ;它组合了COFF格式与模块格式内容表(TOC)两部分;后者提供了.o文件的动态连接与单元代替.XCOFF文件格式的主要优点就是它能提供对共享库和其
他外部.o文件的动态解析引用.而一般地,COFF格式文件只能静态引用.
XCOFF格式文件定义了.o文件与可执行文件的机器内存映象的排列方式,它是由语言处理器(ASM与编译器)生成的,绑定器将单个的.o文件组装形成可执行文件,装载程序将XCOFF格式的可执行文件读进内存,形成程序的内存映象,符号调试器读这个XCOFF的可执行文件,以提供程序内存映象中的变量与函数的符号引用.
这种文件格式只能由AIX V4. 3及以上版本才能生成及装载;当在64位模式下编译时,编译器生成64位指令并产生64位XCOFF格式.o文件,此时绑定器只绑定64位.o文件以生成64位可执行文件.注意,在绑定到一起的.o文件中,不管是静态绑定还是动态绑定,都只能是同一格式的.o文件,即32位的.o文件与64位的.o文件的混合绑定是不允许的. (所谓64位模式,是指生成64位指令,产生64位XCOFF格式文件)
AIX将XCOFF作为32位与64位程序的.o文件格式,从而有XCOFF32与XCOFF64之分,在RS/6000 32位平台或64位平台上,AIX的编译器默认为32位模式,即经编译所得的目标文件是32位的;不过,AIX的cc编译器在调用连接程序ld生成可执行程序时,ld将只是把同类的.o文件(包括库文件)连接成可执行程序,即要么是XCOFF32格式的.o文件,要么是XCOFF64格式的.o文件.
AIX的cc的这个特性要求:如果库是XCOFF32格式的文件,那么所有用到这个库的可执行程序就只能编译为32位的;如果共享库的某个可执行程序要编译为64位的,那么与这个共享库有关的所有可执行程序都要编译为64位的;不允许共享库某个32位库的可执行程序编译为32位的,而另一个共享该库的可执行程序却编译为64位的.
不过,在AIXV4.3中,有少数几个命令既支持32位XCOFF格式同时又支持64位XCOFF格式(即混合模式) ,这些命令有ar,dump, .nm,lorder,ranlib,size,strip.它们都用-X标志(-X32,-X64,-X32_64)来说明.o文件格式.ar支持两种x(X)标志.-x表示从档案库中抽出所指定的文件并放到当前目录;而-X标志则指定iii.编译
资料Wor d
1.cc编译一般来说,AIXAIX编译器cc有许多编译选项,这里只简单介绍一些与64位有关的编译选项.
(1) .-q64选项:有这个编译开关时,所编译生成的.o或可执行程序将是64位的;否则,默认为32位的;
(2) .-qwarn64选项:这个编译选项既可在32位模式下使用,也可在64位模式下使用;使用这个可用来检查源程序中64位的兼容性,它对与64位不兼容的代码给出警告;在从32位移植到64位时,这个编译选项是非常有用的;
(3) .-除了编译选项外,在32位模式与64位模式间转换,还有以下方法:
环境变量 OBJECT_MODE(=32 64 32_64) ---分别表示32位模式、 64位模式编译;32_64表示既可接受32位模式,也可接受64位模式,不过在这种模式下,AIX连接程序与装载程序不会将这种目标程序连接成可执行程序.
配置文件/etc/vac.cfg----在AIXV4.3下是/etc/vac.cfg43,它定义了编译器的许多编译选项;
命令行参数
这三种方式中,以环境变量最优先,其次是配置文件,最后是命令行参数.
2.ar ar命令用于生成库,即将.o文件放到一个库中,由于.o文件有两种模式,即32位与64
位,默认情况下,ar处理32位.o文件,用-X(32, 64,32_64)选项可使其处理64位.o文件,即生成64位库;
3.make 如果对同一个makef ile文件,先在32位模式下运行产生一个32位库,然后又想运行make产生一个64位库时,这个64位库将不会被更新.因为make只认时间戳,而不区分.o文件格式是32位还是64位.而且如果将同名的一个32位和64位.o文件加到同一个库时,会出现问题.
4.32位程序与64位程序在RS/6000 AIX V4.3中的二进制兼容性
这实际上是指32位程序与64位程序在64位平台上的二进制兼容性,因为64位程序只能在64位平台上运行,不能在32位平台上运行.一般来说,用在任何32位处理器或64位处理器上的AIXV4.3编译的64位程序在64位处理器模式上不用重新编译就可运行;用在任何32位处理器或64位处理器上的AIX V4.3编译的32位程序在两种模式下都不用重新编译就可运行.下表列出了对32位程序与64位程序的兼容性问题.
32位/64位兼容性
*注:二进制兼容是指:运行于AIX V4.1与V4 .2的基于RS/6000 POWER-, POWER2-,和PowerPC-的应用程序不须重新编译,就可在AIX V4.3的基于同样的或更新的同一系统的处理器上.不过,不包括下列情况:
(1) .AIX共享库的非共享编译;
(2) .AIX V4参考手册公开说明的不可迁移的部分;
(3) .文档未说明的AIX的内部特性;
(4) .X11R5服务器扩展(仅适用于AIX V4 .3) ;
(5) .用POWER2或PowerPC编译特性编译的程序又不是运行在POWER2或PowerPC平台上;
(6) .用AIX高版本编译的程序在低版本的AIX上可能会运行不正常.
从而,须运行在所有平台上的程序必须用编译器的公共选项.用POWER2技术编译的程序必须运行在POWER2平台上;用PowerPC技术编译的程序必须运行在PowerPC平台.
资料Wor d
5.64位编程的补充及注意事项(结构以字长为边界的填充)
(1) .最好在常数后面加止后缀 在64位程序中,常数一般被编译器默认为long型,就象在32位程序中,常数被编译器默认为int型一样.可在常数后面加上U或L后缀,前者使编译器将后缀为U的常数作为unsigned int型的数;后者使编译器把后缀为L的常数作为unsignedlong型的数;
(2) .声明所有的自定义函数 一般的cc编译器将无声明的函数的返回类型默认为int;在64位程序中,指针占用64位内存,因此返回指针的函数必须声明为64位,当然如同32位程序一样,可声明为指针;不过,将指针与int变量互相赋值绝对会造成兼容性问题;
(3) .从32位数扩展为64位数 这种扩展有可能使32位的负数变成64位的正数;
(4) .与操作系统有关的数据类型 size_t,ssize_t ,time_t等由int long typedef的数据类型;
(5) .含指针或long或unsigned long数据成员的结构的长度的改变 这种改变一般都可由运算子sizeof自动算出;但如果用”硬编码” (具体数字)也可能造成兼容性问题;
(6)对long或unsigned long数据的移位或逻辑操作(&或| )的长度位的设定
三、移植步骤
1.移植步骤
(一) .移植步骤
.将应用程序从32位移植到64位,一般有下列一些步骤,这些步骤并不意味着功能调整或扩展,只不过是如同32位程序一样的行为在64位模式下的解释,在这个过程之后,要用扩展性能,你可能得修改源程序: :
(1) .程序和数据分析
检查所有类型以决定这些数据类型应该是32位还是64位;对系统定义类型,其长度对系统调用/库调用是合适的;对用户定义类型,32位类型应该定义为int or unsigned int或在64位模式下仍是32位的系统定义类型;而用户定义的64位类型应该定义为long orunsigned long或系统定义的64位的类型;
(2) .修改数据类型
将那些需要改变的数据类型改变为你所选择的类型,此时,要检查所有的算术运算以确保数据值的扩展和截短都是正确的;确保没有作出任何指针适合int类型.
(3) .校验其他程序输出的使用
确保所有被处理的数据在32位范围内;若不可能,则其他使用这些数据的程序必须移植到64位或至少能意识到64位.
(4) .移去存储相关
移去在下列情况下的存储相关性:程序正文段,数据段,程序堆,程序堆
栈,errno,tok_of_stack结构,共享库数据,共享库正文,和访管指令表;
(5) .不好的地址用法
当传递一个无效的地址给一个系统调用时, 64位进程将收到信号SIGSEGV(segmentationviolation)而不是EFAULT类型的错误号(14无效的地址) ;任何依赖于系统调用来保护无效地址的地方都应该删除.
(6) .调试与测试
测试程序以确定程序与在32位平台上的行为完全一样;若有差别,则调试程序.返回第一步资料Wor d
在选定数据类型时,如果你要求某些数据类型长度在32位与64位模式下保持一致,比如都是32位,那么有如下三个数据类型:
__long32_t,__ulong32_t,ptr64,
前两个在头文件/usr/include/inttypes.h中定义,后者在头文件
/usr/include/sys/types.h中定义;
在32位模式下,__long32_t是long型,__ulong32_t是unsigned long型;在64位模式下,__long32_t是int型,__ulong32_t是uint型;它们在两个模式下都是4B的长度.而ptr64在32位模式下,是unsigned long long型,在64位模式下,是指针型;在两种模式下,都是8B长度.
当想在32位与64位模式下都想有完全相同的长度时,可将(1)long型用__long32_t或其他32位数据类型代替;用__ulong32_t或其他32位数据类型取代ulong类型; (2)用int或其他32位数据类型取代指针;此时,程序在64位模式下对这个字段不能用指针;
(二) .程序和数据分析
快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...
v5.net一直做独立服务器这块儿的,自从推出云服务器(VPS)以来站长一直还没有关注过,在网友的提醒下弄了个6G内存、2核、100G SSD的美国云服务器来写测评,主机测评给大家趟雷,让你知道v5.net的美国云服务器效果怎么样。本次测评数据仅供参考,有兴趣的还是亲自测试吧! 官方网站:https://v5.net/cloud.html 从显示来看CPU是e5-2660(2.2GHz主频),...
易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。易探云服务器均选择当下热门线路,比如CN2 GIA、BGP线路、CN2线路等,所有云主机支持月付,并且首月优惠,年付优惠,优惠后香港沙田云服务器/独立ip/香港CN2线路,每月仅18元,188元/年。点击进入:易探云官方网站地址1、香港...