32位机和64位机编程时应该注意些什么

来源:互联网 发布:2am 2pm 知乎 编辑:程序博客网 时间:2024/03/29 20:07
1.数据类型在各种机器中所占的字节数不同

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个字节(区别)

2.为了保证平台的通用性,程序中尽量不要使用long数据库型

3.编程中要尽量使用sizeof来计算数据类型的大小,如:int *p = (int *)malloc(sizeof(int)*100);而不要int *p = (int *)malloc(400);

4.使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下: #if __WORDSIZE == 64
typedef long int                intptr_t;
#else
typedef int                        intptr_t;
#endif

5.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可能是long int 类型。后来BSD使用sock_t来替代它

0 0
原创粉丝点击