C++工作笔记-32位和64位程序的区别
原文地址:
https://blog.csdn.net/nma_123456/article/details/45077345
文章结尾有对此博文的修正和补充!
由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件,此处以VS为例。
1、编译程序根据需要选择不同的编译环境:
X86和win32位32位程序,X64为64位程序,可以选择不同的编辑条件形成不同位的软件。
2、代码中的基本的数据类型,会根据操作系统的位数分配内存大小:
如int型在32位操作系统为4字节,在64位系统为8字节
因此在64位上对int型数据操作,编译生成32的程序,有可能导致int型越界,软件出现问题
3、32位的程序在64位操作系统上运行,由于64位操作系统的寻址和偏移的问题,也有可能导致程序在运行过程中,计算结果与32位系统不一致
4、64位操作系统理论上能够兼容32位和64位软件,32位操作系统不能运行64程序
5、使用VS2010或VS2012开发的程序,强制编译为32位软件,在xp系统下运行有问题,有可能与.net framework版本有关系,低版本的framework不能支持高版本framework的一些控件或类库。尝试安装高版本的framework解决问题
借用一下博客内容:
一)64位系统和32位有什么区别?
1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存
2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。
什么是64位处理器?
之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器,其计数都是2的倍数。一次处理的数据越大,该电脑处理信息的能力越来越大;因此64位处理在先天就比32位处理器具有快速的能力。那为什么不用更高级的128位处理器呢?因为位数越高,处理器芯片的设计也就越复杂,目前的技术水平暂时无法制造这么复杂的芯片。
64位处理器之失
※硬件———缺乏驱动程序,很多现有硬件无法使用
※软件———操作系统不是问题,但是软件出现不兼容难题
64位处理器之得
※硬件———更快的执行速度,更大的内存管理
※软件———最新的尖端软件首先出现在64位平台
(二)数据类型对应字节数
程序运行平台
不同的平台上对不同数据类型分配的字节数是不同的。
个人对平台的理解是CPU+OS+Compiler,是因为:
1、64位机器也可以装32位系统(x64装XP);
2、32位机器上可以有16/32位的编译器(XP上有tc是16位的,其他常见的是32位的);
3、即使是32位的编译器也可以弄出64位的integer来(int64)。
以上这些是基于常见的wintel平台,加上我们可能很少机会接触的其它平台(其它的CPU和OS),所以个人认为所谓平台的概念是三者的组合。
虽然三者的长度可以不一样,但显然相互配合(即长度相等,32位的CPU+32位的OS+32位的Compiler)发挥的能量最大。
理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算)。
常用数据类型对应字节数
可用如sizeof(char),sizeof(char*)等得出
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
【博主个人补充】
在VS中,不管是32位系统还是64位系统,int型都是4字节,只有指针类型不同(因为地址位数不同,造成寻址不同,造成指针大小不同)
如下运行截图:
32位的系统截图:
64位的系统截图:
程序源码如下:
#include <stdio.h>void main() {printf("The int size is %d\n", sizeof(int));printf("The pointer size is %d\n", sizeof(void *));getchar();
}
这里来看下反汇编,从反汇编可以看到,64位程序支持更大的寻址。
32位程序的截图:
64位程序的截图:
C++工作笔记-32位和64位程序的区别相关推荐
- 32和64位jvm_我应该使用32位还是64位JVM?
32和64位jvm 这是我在企业软件开发生涯中多次遇到的问题. 我不得不每隔一段时间就提供有关配置特定新环境的建议. 而且,很多时候,手头的问题与"我应该使用32位或64位JVM" ...
- 我应该使用32位还是64位JVM?
这是我在企业软件开发生涯中多次遇到的问题. 我不得不每隔一段时间就提供有关配置特定新环境的建议. 而且,很多时候,手头的问题与"我应该使用32位或64位JVM"有关. 老实说,一开 ...
- 32位dll注入到64位程序_你用的32位还是64位?有什么区别呢?
(给程序员零距离加星标,了解项目开发.) 粉丝福利:小编会从今天留言中抽选3名小伙伴赠送现金红包,感谢大家一直以来的支持!文末见喽!通过前面两篇文章的学习,外甥对电脑的产生了各种好奇,差点把自己电脑拆 ...
- 从编程角度看32位和64位
------------------------文章内容并非原创,看其他博主,有所收获,积累一二---------------------------------- 一)64位系统和32位有什么区别? ...
- 32位和64位版本的Office异同点
转载: https://jingyan.baidu.com/article/9989c7461bb945f648ecfeee.html 在大多数情况下,安装 32 位版本的 MicrosoftOffi ...
- Linux 系统如何查看文件是32位还是64位?
在日常工作中,经常需要查看文件是32位还64位,下面一个命令可以查看: file filename
- 32位系统和64的区别c语言,32位 与 64 位 区别 : CPU 操作系统 应用程序...
1.64位CPU与32位CPU 这两者的指令集合.操作数位数.寄存器名称和个数等等都不相同. 一.比如一条mov eax,1指令,可能在32bCPU上对应的机器指令是0x1201:在64位机器上就是0 ...
- 无法安装X64 在计算机找到X32,怎么看电脑适合装32位还是64位
[怎么看电脑适合装32位还是64位]如何判断电脑适合装32位的系统还是64位的 官方推荐最低配置要求:处理器:1GHz32位或者64位处理器内存:1GB及以上显卡:支持DirectX 9128M及以上 ...
- 【装机吧】Win7电脑系统32位和64位区别(详细版)
第一点 设计初衷不同: [win7系统32位和64位区别] 64位操作系统的设计初衷是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的 ...
最新文章
- 【Hibernate步步为营】--关联映射之多对一
- css 倒三角_【译】改善 CSS 的 10 个最佳实践
- WebRTC促进跨平台指挥调度,触发安防应用新创意
- shell实现压缩多个文件
- 【2021牛客暑期多校训练营5】Double Strings(二维字符串dp)
- char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char
- JavaSE入门学习10:Java修饰符
- php 去除空格和换行
- layui官网地址(备份),layui文档地址(新)
- ios 上h5点击无效_ios h5 点击事件失效及点击延迟
- 延时调用的时候要注意
- itunes显示无法更新服务器失败怎么办啊,iTunes更新时出错怎么办?iTunes更新时出错的解决方法...
- 用MicroPython开发ESP32-文件传输工具-ampy
- UltraVNC 使用,内网局域网远程控制
- 揭开 Java 注解的神秘面纱
- googleapis.com替换CDN
- docker之mongo数据库忘记用户名密码
- 我的偶像王坚博士,一位执着的学者!
- 特种光纤所需学习知识(光纤光学)
- 机器学习算法常见面试题目总结
热门文章
- 中安财报影像识别系统V2.0,为您摘下“紧箍咒
- linux 笔记本电脑_购买支持Linux的笔记本电脑
- 巧用“sfc /scannow”命令扫描修复Win8系统
- 「Activiti精品 悟纤出品」核心类以及如何在SpringBoot集成说明 - 第328篇
- 《FPGA设计实战演练》学习笔记(一)FPGA板级基础五要素电路介绍及注意事项(最小系统)
- L1-085 试试手气
- iOS客户端图片智能裁剪
- 洛谷 P3355 骑士共存问题
- 简单叙述python的编程规范_简明 Python 编程规范
- 批量创建对象的四种模式