Linux下64位程式开发

上传人:飞*** 文档编号:51334326 上传时间:2018-08-13 格式:PPT 页数:32 大小:251KB
返回 下载 相关 举报
Linux下64位程式开发_第1页
第1页 / 共32页
Linux下64位程式开发_第2页
第2页 / 共32页
Linux下64位程式开发_第3页
第3页 / 共32页
Linux下64位程式开发_第4页
第4页 / 共32页
Linux下64位程式开发_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《Linux下64位程式开发》由会员分享,可在线阅读,更多相关《Linux下64位程式开发(32页珍藏版)》请在金锄头文库上搜索。

1、64位程式开发*主要内容o技术概要o开发平台o应用开发o系统编程64位技术概要o64bit技术n(相对于32bit而言)这个位数指的是CPU GPRs (General-Purpose Registers)的数据宽度 为64位,64位指令集就是运行64位数据的指令 ,也就是说处理器一次可以运算64bit数据n两大优点o可以进行更大范围的整数运算o可支持更大的内存64位技术概要oRISC 64bit系统n并非新事物 IBM ,HP, SUN很早就有nPOWER5 , Alpha, UltraSparcIII, MIPS n小型机和大型机oCISC 64bit系统nAMD64技术nIntelEM6

2、4TnIA6464位技术概要oAMD64nAMD64的位技术是在原始32位x86指令集的基 础上加入了x86-64扩展64位x86指令集,使这 款芯片在硬件上兼容原来的32位x86软件,并 同时支持x86-64的扩展64位计算,使得这款芯 片成为真正的64位x86芯片oEM64TnEM64T全称Extended Memory 64 Technology,即扩展64bit内存技术。EM64T 是Intel IA-32架构的扩展,即IA-32e(Intel Architectur-32 extension)64位技术概要ox86-64架构与传统x86的区别n扩展GPRs到64bit,并且数量从8增

3、加到16个n所有的GPRs可以按需编址为8,16,32,64bitn将SSE 寄存器从8个增加到16个n扩展EIP(Extended Intruction Pointer) 到 64bit (RIP)nRegister如下图64位技术概要64位技术概要ox86-64的操作模式n长模式o纯64位模式o兼容模式n传统模式o支持纯x86的模式(实模式,保护模式)n系统管理模式64位技术概要Operating ModeOperating System requiredApplication Recompile requiredDefaultsRegisters ExtensionTypicalAddr

4、ess Size (bits)Operand Size (bits)GPR Width (bits)Long Mode64-bit ModeNew 64-bit OSYes64 32Yes64Compati bility ModeNo32 No32161616Legacy ModeProtecte d ModeLegacy 32-bit OSNo3232No321616Virtual 8086 Mode 161616Real ModeLegacy 16-bit OS64位开发平台o硬件平台o软件平台64位开发平台ox86-64硬件平台nAMD64bit系统平台DT: Athlon64, Ser

5、ver:Opteron64 nIntel EM64T系统平台DT: Pentium 4, Server:Xeon64o目前实际支持的内存nAMD64: 40bit物理地址nEM64T: 36bit物理地址64位开发平台o64bit软件平台n操作系统OSLinux, Windowsn工具链编译器,编辑工具,调试64bit软件平台oCompatibility Thunking LayerAMD64 Operating SystemAMD64 Device DriversUSERKERNELAMD64 Application64-bit ProcessThunking LayerIA32 Appli

6、cation64-bit ProcessLinux 64bit应用程序开发o64位应用程序的优点n访问更大的虚拟内存n允许文件大小达到4EBn更高精度的计算n系统时间基本达到极致nLinux 64bit应用程序开发oLinux 64数据模型ILP32LP64LLP64ILP64char8888short16161616int32323264long32643264long long64646464pointer3264646432bit与64bit数据模型Linux 64bit应用程序开发oLinux 64实例oLinux 32实例Linux 64bit应用程序开发o内存对齐问题4812162

7、04812162024283236paddingpaddingLinux64Linux32struct node char *l;char s;struct node *prev;int i;struct node *next; Linux 64bit应用程序开发o32 位系统移植到 64 位系统nC语言中的符号扩展n声明 n表达式 n赋值 n数字常数 n类型定义 n位移 n字符串格式化 n函数参数32 位系统移植到 64 位系统oC语言中的符号扩展n小心C语言中的符号扩展问题int U=0x80000001;unsigned long UL;UL=(unsigned long)U;UL FF

8、FFFFFF8000000132 位系统移植到 64 位系统o声明n根据需要适当地使用 “L” 或 “U” 来声明整型常量 n确保使用无符号整数来防止符号扩展的问题n如果有些变量在这两个平台上都需要是 32 位的,请将 其类型定义为 int n如果有些变量在 32 位系统上是 32 位的,在 64 位系 统上是 64 位的,请将其类型定义为 long n为了对齐和性能的需要,请将数字变量声明为int 或long 类型。不要试图使用char或short 类型来保存字节n将字符指针和字符字节声明为无符号类型的,这样可以 防止 8 位字符的符号扩展问题。32 位系统移植到 64 位系统o表达式n两个

9、有符号整数相加的结果是一个有符号整数 nint 和 long 类型的两个数相加,结果是一个 long 类型的数 n如果一个操作数是无符号整数,另外一个操作 数是有符号整数,那么表达式的结果就是无符 号整数 nint 和 doubule 类型的两个数相加,结果是一 个 double 类型的数32 位系统移植到 64 位系统o赋值n不要交换使用 int 和 long 类型 int I; long L; I=L;n不要使用 int 类型来存储指针 unsigned int i, *ptr; i = (unsigned) ptr;n不要使用指针来存放 int 类型的值 int *ptr; int i;

10、 ptr = (int *) i;32 位系统移植到 64 位系统o赋值n混合使用无符号和有符号的 32 位整数 long n; int i = -2; unsigned k = 1; n = i + k; - n = (long) i + k; n = (int) (i + k);32 位系统移植到 64 位系统o数字常数n16 进制的常量通常都用作掩码或特殊位的值 0xFFFFFFFF, 0xFFFFFFFFFFFFFFFF0x80000000,0x8000000000000000 n一种好的表示方法 long x=-1L 1L (sizeof(long) * 8) - 1); 32 位系

11、统移植到 64 位系统o类型定义n建议您不要使用 C/C+ 中那些在 64 位系统 上会改变大小的数据类型来编写应用程序,而 是使用一些类型定义或宏来显式地说明变量中 所包含的数据的大小和类型n有些定义可以使代码的可移植性更好optrdiff_t osize_t sizeof(something)ointptr_t 和 uintptr_t oint32_t, uint32_t32 位系统移植到 64 位系统o位移n无类型的整数常量就是 (unsigned) int 类型的 ,这可能会导致在位移时出现被截断的问题olong int = 1 33(0)olong int = 1L 33(0x200

12、000000)32 位系统移植到 64 位系统o字符串格式化n函数 printf () 及其相关函数都可能成为问题的 根源 o32bit: %d, %ld print int, longo64bit: %d, %ld print int, longn指针的格式化 char *ptr = oprintf (%xn“, ptr); ( xxxxxxxx)oprintf (%pn“, ptr); (0x)32 位系统移植到 64 位系统o函数参数n在向函数传递参数时需要记住几件事情o在参数的数据类型是由函数原型定义的情况中,参 数应该根据标准规则转换成这种类型 o在参数类型没有指定的情况中,参数会被转换成更 大的类型 o在 64 位系统上,整型被转换成 64 位的整型值, 单精度的浮点类型被转换成双精度的浮点类型 o如果返回值没有指定,那么函数的缺省返回值是 int 类型的函数参数实例附测试环境OS : Fedora Core 5 (x86-64) Kernel: 2.6.15 GCC : 4.1 IP : 10.141.67.167Thanks

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号