32位操作系统中,int,long占用4字节,short占用2字节…… 那64位的呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32位操作系统中,int,long占用4字节,short占用2字节…… 那64位的呢相关的知识,希望对你有一定的参考价值。

不同的编译器根据不同的 64 位模型有所不同,比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 longlong 和指针是 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: 1
char *: 8
short: 2
short *: 8
int: 4
int *: 8
long: 8
long *: 8
在一台i386系统上运行结果:
char: 1
char *: 4
short: 2
short *: 4
int: 4
int *: 4
long: 4
long *: 4

1. sizeof返回的是byte值,1byte=8bit;
2. 指针类型表示的是内存寻址范围,所以在32位系统,8 * 4 = 32,而64位系统 8 * 8 = 64;这个是没错的;
3. C99标准规定:sizeof(short) <= sizeof(int) <= sizeof(long).来自:求助得到的回答
参考技术A 一样的
他们两者的不同是64位操作系统的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍。本回答被提问者和网友采纳

64位操作系统下,关于int和long占用字节数同为4问题

一.c语言数据占用字节

32位:char 1    short  2   int 4  long 4  long long 8

64位:char 1   short 2    int 4 long 8 long long 8

二.可能原因  编译器的数据模型

Datetype  LP64   ILP64   LLP64   ILP32    LP32

char           8          8         8            8          8

short          16       16       16           16        16

int               32       64       32           32        16

long            64       64       32           32         32 

long long    64

pointer        64       64        64           32        32

一般情况下windows64位一般使用LLP64模型

64位Unix,Linux使用的是LP64模型

三.放轻松电脑不是假的

----------趁年轻,多努力------------

以上是关于32位操作系统中,int,long占用4字节,short占用2字节…… 那64位的呢的主要内容,如果未能解决你的问题,请参考以下文章

16位 32位 64位操作系统下只有long 和指针占用的位数不同

long 与int 比较问题

基本数据类型占用的字节数

32位和64位系统,C语言中char,short,int,long,char*,int*,int**各占多少字节

Java中char,short,int,long占几个字节和多少位

C++中long,short,int的具体区别是啥?