C++工作笔记-32位和64位程序的区别_32位程序和64位程序-程序员宅基地

技术标签: C/C++  计算机组成原理个人笔记  C  计算机科学及编程导论  工作笔记  64位和32位  

原文地址:

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位程序的截图:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq78442761/article/details/81531998

智能推荐

号外!首发!折腾无限!VMware Workstation 7.0 虚拟机安装雪豹snow leopard 10.6_rebelefi+darwin300+ensoniqaudiopci 2合集下载:-程序员宅基地

文章浏览阅读1.1k次。VMware Workstation 7.0 虚拟机安装雪豹snow leopard 10.6!(操作系统windows 7)===原创在远景,转载注明,多谢!== 下载最新版本虚拟机VMware workstation 7.0.0 203739,安装好,重启。还以为在window7的虚拟机里装雪豹会很慢,没想到,它比以前装的豹还流畅许多,声音也不迟缓,_rebelefi+darwin300+ensoniqaudiopci 2合集下载:

公共知识基础计算机常识,公共基础知识计算机常识类试题汇总整理(含答案).pdf...-程序员宅基地

文章浏览阅读279次。计算机常识1.操作系统在第几代计算机开始应用( )。A. 第一代 B.第二代C.第三代 D.第四代2.一般按照( ),将计算机的发展划分为四代。A. 体积的大小 ..._公共基础知识考常识判断推理写作、计算机基础知识

netty mysql_用Netty访问MySql数据库-程序员宅基地

文章浏览阅读1.8k次。1)即使在同步访问MySql时(即从发出单个调用后等待响应的单个线程 - 就像在JDBC中一样),您通常不需要同步块。服务器在必要时进行自我同步。如果您需要一致性,请使用交易。即使使用异步驱动程序,这应该是可能的 - 如果它支持事务。无论如何,当你使用netty的时候,你应该避免同时执行冗长的操作(包括但不限于阻止对外部服务器的调用)。这基本上是通过像servlet这样的每线程调用体系结构来消除n..._netty mysql

天气预报今天几点下雨_24小时天气预报‖秋意渐浓,雨微凉-程序员宅基地

文章浏览阅读6.7k次。今日实况城区最高气温:23.7℃城区最低气温:20.5℃24小时天气预报【赤水市气象台】9月16日16时发布24h天气预报:预计今天夜间到明天白天我市各地阴有小到中雨,城区气温19~22℃。同讲普通话,携手进小康。秋雨不像夏雨那样磅礴决定着全年的旱涝也不象春雨那样“贵如油”秋雨为小麦等秋熟作物提供适宜的墒情“麦收八、十、三场雨”春旱秋涝“春旱秋涝”就是流传于华北的预防秋季降雨和旱涝的谚语,以当年春..._今天东州区几点大约夏雨

python网页请求_Python请求获取Web内容(urllib.请求和请求),pythonrequests,网页内容,urllibrequest,的,使用,区别...-程序员宅基地

文章浏览阅读506次。urllib.request和requests的使用和区别请求网页内容可用urllib.request和requests函数,下面分别描述两种函数使用方法urllib.request的使用1.发起基础请求import urllib.requestreq = urllib.request.Request(url)response = urllib.request.urlopen(req)print(..._req = urllib.request.request(url)

一文搞懂什么是数据仓库(Data Warehouse)数据仓库与数据库区别有哪些?什么是元数据?_什么是数据仓库,数据仓库和数据库的区别是什么?-程序员宅基地

文章浏览阅读4.7w次,点赞52次,收藏415次。前期回顾:⼤数据是如何产⽣的?大数据的特点是什么?什么是埋点?如何进行数据埋点?【超详细介绍】对于这么多种类,这么大体量的数据是如何存储的呢?所以数据仓库就应景而生了。目录数据仓库(数据是如何存储的)1 什么是数据仓库?2 数据仓库解决什么问题?3 数据仓库的主要特征4 数据仓库与数据库区别5 数据仓库架构6 数据仓库元数据管理什么是元数据?元数据具体的工作内容元数据分为技术元数据和业务元数据7 数据治理脏数据的种类数据治理原则知识拓展(数据集市)结束语数据仓库(数据是如何存储的)1 什么是数据_什么是数据仓库,数据仓库和数据库的区别是什么?

随便推点

mac python mysql_Mac 下Python 连接MySQL及使用-程序员宅基地

文章浏览阅读637次。Mac 下Python 连接MySQL及使用安装首先需要安装mysql或mariadb:brew mysql(或brew mariadb)下载Python连接MySQL的接口模块MySQLdb:地址:https://pypi.python.org/pypi/MySQL-python/1.2.5下载zip包后解压出来,进入目录,使用命令安装:(详见目录下INSTALL文件)python setup...._mac python mysql

java freemarker_Java模版引擎之Freemarker-程序员宅基地

文章浏览阅读176次。Java模版引擎之Freemarkerfreemarker是一款模版引擎,是一种基于模版生成静态文件的通用工具,它是为Java程序员提供的一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。1.插值1.1常用${var}语法进行取值1.2对null、不存在对象取值${var!’设置默认值’}1.3取包装对象的值,通过“点”语法:${user.name}1...._java freemarker如何依据传入的string以及map返回替换后的string

CFS调度器负载计算_scale_load_down-程序员宅基地

文章浏览阅读968次。/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/1. 负载结构体每个调度实体都有一个负载结构,用来跟踪调度实体对系统的负载贡献struct sched_entity {struct load_weight load; #ifdef CONFIG_SMP struct sched_avg..._scale_load_down

在linux 下ping不通windows_linuxping不通wind-程序员宅基地

文章浏览阅读2.1k次。1、首先,分别在liunx和window,使用ifconfig和ipconfig命令,看看是不是在同一网段,在同一网段2、在关闭linux下的防火墙。输入命令如下:chkconfig iptables off/on (永久性关闭和开启防火墙), service iptables stop/start (暂时性关闭或开启防火墙)。 也可以开启防火墙时设置端口号:_linuxping不通wind

centOS7搭建DNS服务器配置详解_centos7 dns服务器 区域类型 stub-程序员宅基地

文章浏览阅读1.5w次,点赞19次,收藏98次。写在前言:DNS服务器中 named-checkconf -z /etc/named.conf 命令用来检查所有与DNS有关的配置文件,若有错误,会直接提示,可以代替相关的所有检查命令。通过yum安装所需的BIND软件,系统光盘中自带了BIND服务的安装文件。打开DNS服务的主配置文件:以下是主配置文件中的 “全局配置” 部分各主要配置项的含义(建议删除的就算没删除,也必须更改对的地址,否..._centos7 dns服务器 区域类型 stub

app卡在启动页面android,uni-app运行时卡在启动界面-程序员宅基地

文章浏览阅读3.5k次。1.manifest.json中的ID我改成了assets.apps.UNI9B2EA9F中的UNI9B2EA9Fdcloud_control.xml中的appid我也改成了UNI9B2EA9F但是打包后在华为手机上面运行还是出现卡在启动界面的问题,我不知道该怎么解决,请问有大佬知道吗?我也看过啦 DCloud问答 官方文档,但问题还是没有解决decloud_control.xml 配置manif..._uniapp 卡在启动页

推荐文章

热门文章

相关标签