问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在不同电脑的不同软件上,有的int型变量占用2个字节,有的占用4个字节,这是由什么决定的?

发布网友 发布时间:2022-04-27 13:27

我来回答

3个回答

热心网友 时间:2023-09-24 11:32

最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节。后来,查了The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.意思大致是编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。
这个int类型的大小到底是跟编译器有关,还是跟CPU有关,还是跟操作系统有关?
所谓的16位32位64位系统是由cpu决定的,由机器指令的寻址、寄存器位数决定的
os受cpu的*,但在32位的cpu下16位的os也可以跑(就向上面提到的所谓纯dos)
很多os是向前兼容的,就是使以前的程序也能运行,如果编译器本身是16位时代做的,那么os会提供一个模拟16位的子环境供这个编译器使用
int和void*长度应该是一样的(16位的时候的20位的指针是两个16位错位加起来的)
非要转牛角尖的话,int只是语言定义里面的一个关键字,只对compiler可见,complier说它是几位就是几位,和os/cpu都没关系
永远都用sizeof是最安全的办法,但sizeof只是编译时常量,不能做到二进制兼容(移植)
说 int和void*一样长只是因为在一般情况下它们都应该可以放到单个寄存器里,其实这样说很不确切,还是不要这样理解的好,说在xx位的cpu上int 是多少位只是因为这级别的cpu有对xx位数据进行操作的单条指令(因为寄存器是xx位)(可能会有扩展指令,我不清楚,但关键看寄存器的位数),从而编 译器就图个方便把int做为xx位,这也不一定的,譬如以后64位机器出来了,可能编译器只是把long扩到64位,而int还是当作32,也挺合适的。
网上很多博客对这个有很多的解释,感兴趣可以去看看!

热心网友 时间:2023-09-24 11:32

16位编译器的话是2字节
32位编译器是4字节。

热心网友 时间:2023-09-24 11:33

全角和半角追问你脑残吗?不知道别瞎说!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
煤气管道改造多少钱 皮革沙发套怎么清理呢? 如何清理白色沙发 诚如神之所说游戏介绍 关于真三国无双4的一个问题 几个关于真三国无双4的问题 真三国无双4猛将传的一个小小的问题!! 真三国无双4的一点小问题! 真3国无双4猛将转问题 真三国无双4一些新手问题!请高手一一解答! 4个问题!说好的话加100... c语言中,一个字节就是一个内存单位,占8位,假如我的int类型的数占了两个字节 设C语言中,一个int型数据再内存中占两个字节,则unsigned int 型数据的取值范围为?? 揭秘:艾灸能治疗好肩周炎吗 c语言若int类型占两个字节,则以下语句输出为 艾灸的效果怎么样? 假设int类型变量占用两个字节,有定义int a[20]={2,3,4,5};则数组a在内存中所占字节数是——。 选择.设C语言中,int类型数据占2个字节,则short类型数据占几个字节 23、假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是 设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为 如何计算的? 现在很多医院用艾灸,你认为艾灸的效果如何? 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中 假定int类型变量占用两个字节,若有定义int x[10]={0,2,4},则数组x在内存中所占字 艾灸用随身灸到底有没有效果呢? 朝鲜球队的队员简介 朝鲜队现役主力是谁 微信被骗了对方注销了怎么办,而且把微信里的全部人都拉黑了? 南非世界杯朝鲜的主力队员有那些啊?? 对方注销了发消息会有显示么? 对方注销了还能看到他的朋友圈吗? 锦鲤的生活习性 C语言,int p变量占用4个字节(假定)? 已知 int类型变量占用四个字节,其有定义:int x[5]={0,2,4};,则数组x在内存中所占字节数 计算机二级C 题目 若有以下定义(设int 类型变量找有2个字节) 如何在word中画出的表格内写字 怎么在word表格里写字 计算机主状与维修 简述声乐教学法的步骤 学习声乐 声乐怎么去自学,学习声乐步骤是什么? 学习唱歌的步骤有哪些 声乐学上正确的发声方法 梦见之前公司老总去自己家那边玩 梦见以前领导来我家后来我要打他 周公解梦梦见领导来我家,认为我家楼房不好 梦见以前的老板来了我家然后又给大家买白衬衫车上拉的都是花? 昨晚梦见以前的老板来我家做生意 梦见以前的公司所有领导开车去我家看我 梦见单位领导来我家通知弟弟去他哪儿上班 梦见单位领导来我家饿了做饭,但总是做不成? 有人在微信群里发商品,我要怎样去付款?