技术标签: 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位程序的截图:
文章浏览阅读1.1k次。VMware Workstation 7.0 虚拟机安装雪豹snow leopard 10.6!(操作系统windows 7)===原创在远景,转载注明,多谢!== 下载最新版本虚拟机VMware workstation 7.0.0 203739,安装好,重启。还以为在window7的虚拟机里装雪豹会很慢,没想到,它比以前装的豹还流畅许多,声音也不迟缓,_rebelefi+darwin300+ensoniqaudiopci 2合集下载:
文章浏览阅读279次。计算机常识1.操作系统在第几代计算机开始应用( )。A. 第一代 B.第二代C.第三代 D.第四代2.一般按照( ),将计算机的发展划分为四代。A. 体积的大小 ..._公共基础知识考常识判断推理写作、计算机基础知识
文章浏览阅读1.8k次。1)即使在同步访问MySql时(即从发出单个调用后等待响应的单个线程 - 就像在JDBC中一样),您通常不需要同步块。服务器在必要时进行自我同步。如果您需要一致性,请使用交易。即使使用异步驱动程序,这应该是可能的 - 如果它支持事务。无论如何,当你使用netty的时候,你应该避免同时执行冗长的操作(包括但不限于阻止对外部服务器的调用)。这基本上是通过像servlet这样的每线程调用体系结构来消除n..._netty mysql
文章浏览阅读6.7k次。今日实况城区最高气温:23.7℃城区最低气温:20.5℃24小时天气预报【赤水市气象台】9月16日16时发布24h天气预报:预计今天夜间到明天白天我市各地阴有小到中雨,城区气温19~22℃。同讲普通话,携手进小康。秋雨不像夏雨那样磅礴决定着全年的旱涝也不象春雨那样“贵如油”秋雨为小麦等秋熟作物提供适宜的墒情“麦收八、十、三场雨”春旱秋涝“春旱秋涝”就是流传于华北的预防秋季降雨和旱涝的谚语,以当年春..._今天东州区几点大约夏雨
文章浏览阅读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)
文章浏览阅读4.7w次,点赞52次,收藏415次。前期回顾:⼤数据是如何产⽣的?大数据的特点是什么?什么是埋点?如何进行数据埋点?【超详细介绍】对于这么多种类,这么大体量的数据是如何存储的呢?所以数据仓库就应景而生了。目录数据仓库(数据是如何存储的)1 什么是数据仓库?2 数据仓库解决什么问题?3 数据仓库的主要特征4 数据仓库与数据库区别5 数据仓库架构6 数据仓库元数据管理什么是元数据?元数据具体的工作内容元数据分为技术元数据和业务元数据7 数据治理脏数据的种类数据治理原则知识拓展(数据集市)结束语数据仓库(数据是如何存储的)1 什么是数据_什么是数据仓库,数据仓库和数据库的区别是什么?
文章浏览阅读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
文章浏览阅读176次。Java模版引擎之Freemarkerfreemarker是一款模版引擎,是一种基于模版生成静态文件的通用工具,它是为Java程序员提供的一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。1.插值1.1常用${var}语法进行取值1.2对null、不存在对象取值${var!’设置默认值’}1.3取包装对象的值,通过“点”语法:${user.name}1...._java freemarker如何依据传入的string以及map返回替换后的string
文章浏览阅读968次。/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/1. 负载结构体每个调度实体都有一个负载结构,用来跟踪调度实体对系统的负载贡献struct sched_entity {struct load_weight load; #ifdef CONFIG_SMP struct sched_avg..._scale_load_down
文章浏览阅读2.1k次。1、首先,分别在liunx和window,使用ifconfig和ipconfig命令,看看是不是在同一网段,在同一网段2、在关闭linux下的防火墙。输入命令如下:chkconfig iptables off/on (永久性关闭和开启防火墙), service iptables stop/start (暂时性关闭或开启防火墙)。 也可以开启防火墙时设置端口号:_linuxping不通wind
文章浏览阅读1.5w次,点赞19次,收藏98次。写在前言:DNS服务器中 named-checkconf -z /etc/named.conf 命令用来检查所有与DNS有关的配置文件,若有错误,会直接提示,可以代替相关的所有检查命令。通过yum安装所需的BIND软件,系统光盘中自带了BIND服务的安装文件。打开DNS服务的主配置文件:以下是主配置文件中的 “全局配置” 部分各主要配置项的含义(建议删除的就算没删除,也必须更改对的地址,否..._centos7 dns服务器 区域类型 stub
文章浏览阅读3.5k次。1.manifest.json中的ID我改成了assets.apps.UNI9B2EA9F中的UNI9B2EA9Fdcloud_control.xml中的appid我也改成了UNI9B2EA9F但是打包后在华为手机上面运行还是出现卡在启动界面的问题,我不知道该怎么解决,请问有大佬知道吗?我也看过啦 DCloud问答 官方文档,但问题还是没有解决decloud_control.xml 配置manif..._uniapp 卡在启动页