64位系统和32位系统下的short、int、long数据的宽度

不同的编译器根据不同的 64 位模型有所不同。

比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 long 和指针是 64 位,int 保持 32 位不变。
可以运行下代码得到结果。#include <stdio.h>int main(){        printf("char: %d\n",sizeof(char));        printf("char *: %d\n",sizeof(char *));        printf("short: %d\n",sizeof(short));        printf("short *: %d\n",sizeof(short *));        printf("int: %d\n",sizeof(int));        printf("int *: %d\n",sizeof(int *));        printf("long: %d\n",sizeof(long));        printf("long *: %d\n",sizeof(long *));}在一台x86_64系统上运行结果:char: 1char *: 8short: 2short *: 8int: 4int *: 8long: 8long *: 8在一台i386系统上运行结果:char: 1char *: 4short: 2short *: 4int: 4int *: 4long: 4long *: 4

在32位中,short=2 int=long=4在64位中,short=2,int=4,long=8

1. 指针类型表示的是内存寻址范围,所以在32位系统,8 * 4 = 32,而64位系统 8 * 8 = 64;这个是没错的;2. C99标准规定:sizeof(short) <= sizeof(int) <= sizeof(long).

http://zhidao.baidu.com/link?url=wrvmVbgFV-yPVAq_6O5O8Kf27QCvyCsPYjts7Z1zVXAxDBAS0RhrdM_Y-jiutPMmRgQWkByUwJ2HBMr-rvZP-_
时间: 2024-11-06 10:08:43

64位系统和32位系统下的short、int、long数据的宽度的相关文章

Windows 64位操作系统和32位操作系统在注册表上的有一点不一样

Windows 64位操作系统为提供对32位应用程序的兼容,在“C:\Windows\SysWOW64”目录下保留了很多32位的工具(如CMD.exe是32位的).在Windows 64位操作系统上跑三十二位应用程序,操作注册表,搜素目录时,微软通过反射(Reflector),会将“\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall”替换为"\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\C

安装win7 64位系统和win 8系统问题总结

一. 为了扩大系统盘容量而且不损毁不论什么一个磁盘的文件.小编在安装windows 系统前.制作了一个Ubuntu的live CD,U盘启动后进入linux 的试用版,利用磁盘分区工具 gparted 将系统盘的相邻磁盘做个空间转移(Resize),然后将得到了一定容量的 unlocated 磁盘空间,但是发现系统盘和相邻的磁盘空间无法合并,问题例如以下: 分析后才发现原来刚才得到的空余空间属于拓展分区空间.而系统分区是逻辑分区.于是点击extented,改变拓展分区空间.这样系统分区就能够和刚

计算机组成原理--64位CPU装载32位操作系统,它的寻址能力还是4GB吗?

借由这个问题,今天我们就把 32 位 CPU.64 位 CPU.32 位操作系统.64 位操作系统之间的区别与联系彻底搞清楚.对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与64位CPU 以下内容摘自维基百科: 64 位 CPU 是指 CPU 内部的通用寄存器的宽度为 64 比特,支持整数的 64 比特宽度的算术与逻辑运算.那么 32 位 CPU 同理. 一个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度:术语"64位"也常用于描述这些总线的大小.不过

32位程序下调用64位函数——进程32位模式与64位模式切换

之前学习的32位进程中调用64位进程函数的知识整理一下,也就是32位模式与64位模式之间的切换. 相关博客:http://www.cnblogs.com/lanrenxinxin/p/4821152.html 这个博客中提到了github上的开源库,我在另一份开源项目中也看到了个库,可以切换32位至64位. 如果对这个功能具体实现比较感兴趣的朋友可以看看下面的内容. 我阅读了源码并进行了注释,算是对这个具体方法的分析和学习. 关键: 1.在x64下的进程,不管是32位或者是64位,实际上都映射了

64位主机64位oracle下装32位客户端ODAC(NFPACS版)

64位主机64位oracle下装32位客户端ODAC(NFPACS版) by dd 1.下载Oracle Data Access Components(ODAC) Xcopy的两个版本: x86:(我们用到的是这个ODAC1120320Xcopy_32bit)http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html x64:http://www.oracle.com/technetwork/dat

怎样打开64位 Ubuntu 的32位支持功能?

大多数使用基于 Ubuntu/Debian 的发行版的人都更倾向于选择64位的系统,对吧?这是因为64位的系统能够充分发挥你的硬件的全部性能, 它使你能够在更紧张的内存资源下使用更复杂的软件,而且是真的快速使用,不必每次做一件小事都要等上许久.现在,32位仅有一个优点,那就是没有太多兼容 性上的问题.每次JAVA更新都很让人很困惑,因为大多数用户都不能获得需要的库文件.在过去,很多别的软件和驱动也没有64位版. 因此, 如果现在你有一个64位架构的系统,而且你可以使用之前的支持:包括驱动.64位

64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程需要调用32位dll的问题.由于有一些32位dll没有源代码,无法重新编译为64位dll,所以只能想办法解决64位进程调用32位dll问题,这个问题让我很是挠头了几天. 相关资料:微软公司的官方网站针对这个问题描述如下:在64位的windows系统中,一个64位进程不能加载一个32位

64位ubuntu下装32位软件

本帖最后由 wuy069 于 2013-10-25 12:28 编辑很多软件只有32位的,有的依赖32位库还挺严重的:从ubuntu 13.10已经废弃了ia32-libs,但可以使用多架构,安装软件或包apt-get install program:i386.有的还是觉得烦,想一步到位安装所有的以前的ia32-libs,可以使用以下方法: sudo -i cd /etc/apt/sources.list.d echo "deb http://archive.ubuntu.com/ubuntu/

64位ubuntu编译32位程序

64位ubuntu编译32位程序 如上使用C4这个小工具时遇到来需要仿真32位系统的需求,发现使用-m32参数后,编译提示错误,如下: /usr/bin/ld: 未知的仿真模式: 32 支持的仿真: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om elf_k1om i386pep i386pe collect2: error: ld returned 1 exit status 首先要打开64位系统对32位的支持 第一步:确认64为架构的内