64位机器中int占几个字节

yangna0534 2011-12-27 01:09:08
16位机器,int占2B,32位占4B。
tc编译器占2B,vc占4B。
在xp系统里运行TC,int占多少字节。在win 7里运行又占多少字节?
谁能告诉我,内存大小是由硬件决定的?还是编译器的原因,还是什么?编译器又在编译代码时担任了什么角色。
...全文
10229 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjbjbh 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nibiewuxuanze 的回复:]
另一方面是编译器的支持情况了,TC是在16位环境中运行的,所以int只有16位。win7应该已经不能运行TC这样的16位程序了。
[/Quote]
不是吧,我的win7旗舰版 运行TC没问题。
bjbjbh 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nibiewuxuanze 的回复:]
另一方面是编译器的支持情况了,TC是在16位环境中运行的,所以int只有16位。win7应该已经不能运行TC这样的16位程序了。
[/Quote]
不是吧,我的win7旗舰版 运行TC没问题。
cfvmario 2011-12-27
  • 打赏
  • 举报
回复
如果需要指定大小,就用__int32,__int64呗
int尽量少用,歧义。
AnYidan 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]
一个int占多少个字节既由编译器决定,也由CPU或虚拟机或操作系统决定,但归根结底是由编译器决定。
[/Quote]

windows 7, vs2010, sizeof(int) = 4;
chayedanwc 2011-12-27
  • 打赏
  • 举报
回复
C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长。在不同的平台上,根据编译器不同的实现,它们的字长如下表所示:
数据类型 LP64 ILP64 LLP64 ILP32 LP32
char 8 8 8 8 8
short 16 16 16 16 16
_int32 N/A 32 N/A N/A N/A
int 32 64 32 32 16
long 64 64 32 32 32
long long N/A N/A 64 N/A N/A
pointer 64 64 64 32 32

在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。
LP64意思是long和pointer是64位,ILP64指 int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。
32位Windows采用的是ILP32数据模型,64位Windows采用的是LLP64数据模型。
所以,Windows上的32位程序设计和64位程序设计最大的不同(也就是IP32和LLP64的不同),就在于指针的长度不同??由32位变成了64位。
chayedanwc 2011-12-27
  • 打赏
  • 举报
回复
C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长。在不同的平台上,根据编译器不同的实现,它们的字长如下表所示:
数据类型 LP64 ILP64 LLP64 ILP32 LP32
char 8 8 8 8 8
short 16 16 16 16 16
_int32 N/A 32 N/A N/A N/A
int 32 64 32 32 16
long 64 64 32 32 32
long long N/A N/A 64 N/A N/A
pointer 64 64 64 32 32

在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。
LP64意思是long和pointer是64位,ILP64指 int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。
32位Windows采用的是ILP32数据模型,64位Windows采用的是LLP64数据模型。
所以,Windows上的32位程序设计和64位程序设计最大的不同(也就是IP32和LLP64的不同),就在于指针的长度不同??由32位变成了64位。
chayedanwc 2011-12-27
  • 打赏
  • 举报
回复
C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长。在不同的平台上,根据编译器不同的实现,它们的字长如下表所示:
数据类型 LP64 ILP64 LLP64 ILP32 LP32
char 8 8 8 8 8
short 16 16 16 16 16
_int32 N/A 32 N/A N/A N/A
int 32 64 32 32 16
long 64 64 32 32 32
long long N/A N/A 64 N/A N/A
pointer 64 64 64 32 32

在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。
LP64意思是long和pointer是64位,ILP64指 int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。
32位Windows采用的是ILP32数据模型,64位Windows采用的是LLP64数据模型。
所以,Windows上的32位程序设计和64位程序设计最大的不同(也就是IP32和LLP64的不同),就在于指针的长度不同??由32位变成了64位。
赵4老师 2011-12-27
  • 打赏
  • 举报
回复
一个int占多少个字节既由编译器决定,也由CPU或虚拟机或操作系统决定,但归根结底是由编译器决定。
luciferisnotsatan 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mingliang1212 的回复:]

编译器充当了实现C语言标准规定的内容的工具,但是编译器用什么方式来实现这些内容,很多情况下,C语言标准是不规定的.
C语言标准也不规定一个int类型应该是多少字节.所以不同编译器可以有不同大小都是合乎标准的.
所以不要写依赖这些变量的大小的代码,否则你写的代码可移植性差.
[/Quote]
++

通常,64位里int还是4字节,long成了8字节
gqjjqg 2011-12-27
  • 打赏
  • 举报
回复
代码 -》编译器-》机器码
机器码-》硬件-》执行

OS内存大小果断由内存条决定,当然虚拟内存啥的就不包括在内。

你没装过VS吗? 去微软官网一看,有X86和X64俩版本的。
编译器只是负责编译出在指定硬件平台上执行的机器码而已。

要是硬件不同,他们的机器指令集也会不同,就导致不同平台的兼容性问题。

所以 XP 有X86和X64,WIN7也是如此。

装的都是16位的编译器,那么int 都是 2B的,装的32位的,int 就是4B的。
和编译器有关系,和平台无关。
当然编译器一般都会和平台兼容,根据OS支持的字长来...


iamnobody 2011-12-27
  • 打赏
  • 举报
回复
编译器充当了实现C语言标准规定的内容的工具,但是编译器用什么方式来实现这些内容,很多情况下,C语言标准是不规定的.
C语言标准也不规定一个int类型应该是多少字节.所以不同编译器可以有不同大小都是合乎标准的.
所以不要写依赖这些变量的大小的代码,否则你写的代码可移植性差.
薛定谔之死猫 2011-12-27
  • 打赏
  • 举报
回复
编译器决定的,当然编译器会判断宿主系统支持的字长情况~
建鼎呓语 2011-12-27
  • 打赏
  • 举报
回复
另一方面是编译器的支持情况了,TC是在16位环境中运行的,所以int只有16位。win7应该已经不能运行TC这样的16位程序了。
建鼎呓语 2011-12-27
  • 打赏
  • 举报
回复
int的长度跟机器长度一致,16位机器int就是16位,类似的32位、64位等等。

69,393

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧