long类型 linux,为什么Linux系统调用返回类型“long”?

在64位的x86-64架构上,GCC编译器的`int`保持为32位,而`void*`和`long`变为64位。在32位模式下,`int`和指针类型都是32位。`intptr_t`在64位系统中用于统一指针和整数的大小。这个问题探讨了不同架构下数据类型的尺寸差异和C99标准的`stdint.h`头文件的角色。
摘要由CSDN通过智能技术生成

因为在许多

64 bits机器(例如x86-64)上用于常见的GCC编译器sizeof(int)== 4但是sizeof(void *)== 8&&的sizeof(长)== 8;这被称为I32LP64(或只是LP64)

data model

例如,在Linux / x86-64系统上编译并运行以下程序:

#include

#include

int main ()

{

printf ("sizeof(int)=%d\n", (int) sizeof (int));

printf ("sizeof(intptr_t)=%d\n", (int) sizeof (intptr_t));

printf ("sizeof(short)=%d\n", (int) sizeof (short));

printf ("sizeof(long)=%d\n", (int) sizeof (long));

printf ("sizeof(long long)=%d\n", (int) sizeof (long long));

printf ("sizeof(void*)=%d\n", (int) sizeof (void *));

return 0;

}

在我的系统上使用gcc -Wall s.c -o编译并在我的Debian / Sid / x86-64(i3770k处理器,GCC 4.8.2)上运行./s:

sizeof(int)=4

sizeof(intptr_t)=8

sizeof(short)=2

sizeof(long)=8

sizeof(long long)=8

sizeof(void*)=8

在32位模式下使用gcc -m32 -Wall s.c -o s32编译并运行./s32:

sizeof(int)=4

sizeof(intptr_t)=4

sizeof(short)=2

sizeof(long)=4

sizeof(long long)=8

sizeof(void*)=4

如果使用gcc -mx32 -O3 -Wall s.c -o sx32编译x32,我得到相同的输出!

BTW,也许更好的问题是为什么不使用intptr_t ….我不知道(可能是一个习惯问题; when Linus首先开始编写他的内核,C99标准定义< stdint.h>和intptr_t-不存在).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值