为什么int占用c或任何其他语言的4个字节?

时间:2017-11-28 20:36:13

标签: c int

这是一个普遍的问题,与c编程语言没有完全相关,但这正是我目前正在研究的问题。

为什么整数占用4个字节或者多少字节依赖于系统?

为什么每个整数不占用1个字节?

例如,为什么以下占用8个字节:

int a = 1;
int b = 1;

由于

4 个答案:

答案 0 :(得分:4)

我不确定您是在问为什么int个对象具有固定大小而不是可变大小,或者您是否在问为什么int个对象具有固定大小。这回答了前者。

我们不希望基本类型具有可变长度。这使得与它们合作变得非常复杂。

我们希望它们具有固定的长度,因为生成指令以操作它们要容易得多。此外,操作会更快。

如果int的大小可变,请考虑以下情况:

b = 3;
b += 100000;
scanf("%d", &b);

首次分配b时,只需要一个字节。然后,当执行添加时,编译器需要更多空间。但b可能在内存中有邻居,因此编译器不能只在适当的位置增长它。它必须释放旧内存并在某处分配新内存。

然后,当我们执行scanf时,编译器不知道要传输多少数据。 scanf必须做一些非常复杂的工作,一遍又一遍地增长b,因为它会读取更多数字。并且,完成后,它如何让您知道新b的位置?编译器必须有一些机制来更新b的位置。这很复杂,会引起其他问题。

相反,如果b具有四个字节的固定大小,则这很容易。对于作业,请将3写入b。要添加,请在b中为值添加100000,并将结果写入b。对于scanf,将b的地址传递给scanf,然后将新值写入b。这很容易。

答案 1 :(得分:1)

基本积分类型int保证至少有16位;至少意味着编译器/体系结构也可以提供更多位,并且在32/64位系统int上最可能分别包括32位或64位(即4字节或8字节)(例如,参见cppreference.com):

  

整数类型

     

... int(也可以作为signed int访问):这是最优的   平台的整数类型,保证至少为16   位。大多数当前系统使用32位(参见下面的数据模型)。​​

如果您想要一个只有8位的整数类型,请使用int8_tuint8_t

答案 2 :(得分:0)

没有。它是实现定义的。例如,Atmel 8位微控制器上的signed int中的gcc是16位整数。 unsigned int也是16位,但是从0-65535开始,因为它是无符号的。

答案 3 :(得分:0)

<div id="mapDiv"> <svg id="mapSVG" width="960" height="600" viewbox="0 0"></svg> </div> 使用固定数量的字节(例如4)这一事实是编译器/ CPU的效率和限制,旨在使公共整数操作快速有效。

有些类型(例如Java中的var svg = d3.select("#mapSVG"), width = +svg.attr("width"), height = +svg.attr("height"); )占用了可变的空间量。这些类型将有2个字段,第一个是用于表示整数的字数,第二个是字数组。您可以定义自己的#mapDiv{ border: 2px solid #000; border-radius: 7px; float: left; width: 50%; } #mapSVG{ display: block; margin: auto; } 类型,例如:

int

等等,但执行算术运算速度不是很快。您必须决定如何处理溢出;调整存储大小需要动态内存分配。