32位与64位基础

C语言编程需要注意的64位和32机器的区别  

一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:

16位平台

char         1个字节8位

short        2个字节16位

int            2个字节16位

long         4个字节32位

指针         2个字节

32位平台

char         1个字节8位

short        2个字节16位

int            4个字节32位

long         4个字节

long long 8个字节

指针         4个字节

64位平台

char         1个字节

short        2个字节

int            4个字节

long         8个字节(区别)

long long 8个字节

指针        8个字节(区别)

二、编程注意事项

为了保证平台的通用性,程序中尽量不要使用long数据库型。可以使用固定大小的数据类型宏定义,这些宏定义需要引用stdint.h头文件:

typedef signed char       int8_t

typedef short int             int16_t;

typedef int                      int32_t;

# if __WORDSIZE == 64

typedef long int              int64_t;

# else

__extension__

typedef long long int      int64_t;

#endif

三、使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台字长,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,使用它可以安全地进行整数与指针的转换运算,也就是说当需要将指针作为整数运算时,将它转换成intptr_t进行运算才是安全的。intptr_t需要引用stddef.h头文件,它的定义如下:

#if __WORDSIZE == 64

typedef long int                intptr_t;

#else

typedef int                        intptr_t;

#endif

编程中要尽量使用sizeof来计算数据类型的大小

以上类型定义都有相应的无符号类型。

四、使用ssize_t和size_t

它们分别是unsigned和signed size of computer word size。它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型。使用它们对于增加平台的通用性有很大好处,从某种意义上来说它们等同于intptr_t和uintptr_t。使用它们也需要引用stddef.h头文件。

五、socket的accept函数在有些操作系统上使用size_t是不正确的,因为accept接收的int*类型,而size_t的长度可能会超过int*的长度限制,导致错误。后来BSD使用sock_t来替代它。

时间: 2024-08-04 00:07:21

32位与64位基础的相关文章

查看系统版本、32位与64位生产场景中的使用及对比

一.查看系统版本 [[email protected] ~]# uname -a #系统版本详细信息 Linux ysolin 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -r   #内核版本 2.6.32-431.el6.x86_64 [[email protected] ~]# uname -m   #

32位与64位

1.我们所说的64位CPU架构指的是64位内存扩展技术,它是32CPU架构的一个扩展,且兼容原来的架构.它通过增加CPU的运算位宽扩展增加CPU和内存之间的位宽,从而让系统支持更大容量的内存,64位最大支持64G. 2.处理器模式:传统32位模式:安装32位操作系统,安装32位硬件驱动程序,安装32位应用程序.目前大多数人的处理器是Intel 64,安装了32位操作系统,程序运行良好,包括16bit和32bit程序. 兼容模式:操作系统和硬件驱动程序都是64bit,计算机允许64bit操作系统下

32位与64位系统的不同点

设计的初衷不同 64位操作系统的设计初衷是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求,简单说就是64位操作系统是为专业用户专业软件而设计的,而32位系统是为普通用户设计的. 要求配置不同 64位操作系统只能安装在64位电脑上,即CPU必须是64位的,同时需要安装64位常用软件以发挥最佳性能.32位操作系统可以安装在32位或64位电脑上,但是32位操作系统安装在64位电脑上显然不能充分发挥64位硬件的性能. 运算速度不同

@清晰掉 各种类型32位与64位下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂):可以访问大型数据库.本文介绍的是64位下C语言开发程序注意事项. 1. 32 位和 64 位C数据类型 32和64位C语言内置数据类型,如下表所示: 上表中第一行的大写字母和数字含义如下所示:I表示:int类型L表示:long类型P表示:pointer指针类型32表示:32位系统64表示64位系统如:LP64表示,在64位系统下的long类型和pointer类型长度为64位.64位Li

机器字长 32位与64位的区别

1.64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存 2.64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍.但这是建立在64bit操作系统,64bit软件的基础上的 3. 32位/64位处理器指的是CPU在同一时间内能处理的数据位数(8位=1B),机器字长一般是指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度. 如 某计算机字长32位,存储容量8MB.按字编址,其寻址范围为 8MB字节=8*1024*1024*8位.所

[转] 关于VS中区分debug与release,32位与64位编译的宏定义

在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的google. 1.判断是debug编译还是release编译. 如果_DEBUG定义了表示是debug编译,否则是release编译. 2.判断是32位编译还是64位编译. 在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义.在 x64 配置下,两者都有定义.即在 VC 下,_WIN3

values of type NSInteger should not be used as format arguments; 关于Xcode中烦人的32位与64位警告处理方法.

http://stackoverflow.com/questions/16075559/why-does-an-nsinteger-variable-have-to-be-casted-to-long-when-used-as-a-format-a 老老实实按Xcode的提示来处理 添加ld%, 添加(long) 这样才能保证在32位和64位上都不会出现警告. [NSString stringWithFormat:@"%ld", (long)_filterIndex]

32位与64位编译器的长度对比

可用如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*(即指针变量):

win2003 64位系统IIS6.0 32位与64位间切换

ASP.NET 1.1,32 位版本 要运行 32 位版本的 ASP.NET 1.1,按照以下步骤操作: 1.单击“开始”,单击“运行”,键入 cmd,然后单击“确定”. 2.键入以下命令启用 32 位模式: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 3.键入以下命令,安装 ASP.NET 1.1 版本并在 IIS 根目录下安装脚本映射: %S