在不同电脑的不同软件上,有的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
全角和半角追问你脑残吗?不知道别瞎说!