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

Ben*_*rne 0 c int

这是一个有点笼统的问题,与 c 编程语言并不完全相关,但这是我目前正在研究的问题。

为什么一个整数占用 4 个字节或多少字节取决于系统?

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

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

int a = 1;
int b = 1;
Run Code Online (Sandbox Code Playgroud)

谢谢

Eri*_*hil 5

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

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

我们希望它们具有固定的长度,因为这样更容易生成对它们进行操作的指令。此外,操作会更快。

如果 an 的大小int可变,请考虑执行以下操作时会发生什么:

b = 3;
b += 100000;
scanf("%d", &b);
Run Code Online (Sandbox Code Playgroud)

b第一次分配,只需要一个字节。然后,当执行加法时,编译器需要更多空间。但是b在内存中可能有邻居,所以编译器不能就地增长。它必须释放旧内存并在某处分配新内存。

然后,当我们执行 时scanf,编译器不知道有多少数据到来。当它读取更多数字时,scanf将不得不做一些非常复杂的工作来b一遍又一遍地增长。而且,当它完成时,它如何让你知道新的b在哪里?编译器必须有某种机制来更新位置b. 这既困难又复杂,并且会导致其他问题。

相比之下,如果b有四个字节的固定大小,这很容易。对于作业,将 3 写入b。对于加法,将 100000 添加到 中的值b并将结果写入b。对于scanf,传递bto的地址scanf并让它将新值写入b。这很简单。