从32位程序开发进入64位程序开发
来源:互联网 发布:办公软件有问题 编辑:程序博客网 时间:2024/06/05 19:30
2005年Windows XP x64版刚推出来的时候,做过金山网镖和金山毒霸的64位移植,当时最小的移植过程就是把驱动从32bit移植为原生的64bit驱动(因为x64的Windows只能加载原生的64位驱动),其他的就是32位和64位通信接口的兼容。
当时做完移植后,总结了一下,在Windows上面32位与64位的区别有:
1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节
2.size_t的区别,size_t在32bit下面是4个字节的范围,在64bit下面是8个字节的范围
3.地址空间的区别,在32bit下面,最大地址空间是4GB,在64bit下面是可以大于4GB的
4.32位程序在64位Windows上运行,是有一个Wow64子系统辅助其运行的,默认情况下,访问注册表和某些文件夹是被重定向的
5.指针的区别也意味着Handle的区别
6.唯一支持Windows原始64位编译的msvc编译器不支持64bit的内联汇编,如果要用汇编,需要单独编译再link
7.纯64bit程序的函数调用方式已经不再区分cdecl和stdcall方式,因为只有一种了。
8.64bit的程序不再使用esp,而是使用增加的几个64bit寄存器,因为esp不支持64bit空间的栈
最近的工作涉及到Linux的64位工作,发现当初对32位和64位区别的认识还不够:
1.long在Windows下面,不管是32bit还是64bit下,都是4个字节的,但在Linux下面,32bit下是4字节,在64bit下是8个字节。(long long在64bit下还是8个字节)
2.gcc在64bit下面,不再支持__attribute((cdecl))__和__attribute((stdcall))__,这点和Windows有点类似,开始以为是gcc的高版本不支持的,后来发现区别在x86和x64
- 从32位程序开发进入64位程序开发
- 从32位运用程序到64位运用程序
- Qt 64位程序开发环境搭建
- 使用VC6.0在32位平台上开发64位程序
- 使用VC6.0在32位平台上开发64位程序
- 使用VC6.0在32位平台上开发64位程序
- 使用VC6.0在32位平台上开发64位程序
- 使用VC6.0在32位平台上开发64位程序
- win7+vs2010下开发32位和64位程序glut配置方法
- 使用VC6.0在32位平台上开发64位程序
- 在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置
- 使用VS开发基于Oracle程序的严重问题32位64位
- “位运算”在程序开发中的妙用!
- 32位到64位程序移植
- 64位Linux 编译32位程序
- Linux 64位 编译32位程序
- 64位系统运行32位程序
- Ubuntu 64位跑32位程序
- 学习 C++的用途,(前辈总结)
- 深入浅出4G标准:LTE FDD和LTE TDD
- UIViewController的 dismissViewControllerAnimated:completion:方法
- 32位机指针为什么是4个字节 64位与32位机的区别
- 带指针的通信结构体32位与64位兼容
- 从32位程序开发进入64位程序开发
- WINDOWS_32位与64位系统的编程差异
- 64位与32位编程的数据类型区别
- android sqllite 支持的数据类型
- Java 集合(Collections)总结
- LeetCode(11) ContainerWithMostWater
- PHP运行出现Notice : Use of undefined constant 的解决办法
- CRM上线之路 走上了CRM实施顾问-第88天上班 -第19周
- AJAX_1