为什么 int 和 C 中的 long 大小相同?

Why is int the same size as long in C?

也许更好的问题是,当我的编译器告诉我 sizeof(int) = sizeof(long) = 4 个字节时,long 怎么可能存储比整数更大的数字?我无法理解它……为什么不会溢出?当需要更大的数字时,是否在运行时调整?

根据this

标准规定int至少 16 位,long至少是 32 位。因此,根据实现的不同,它们可能大小相同(它们可能都是 32 位),也可能大小不同。这意味着如果对这些数据类型的大小做出假设,为两种不同环境编译的同一个程序可能会有不同的行为。

why wouldn't there be an overflow? Is it adjusted during runtime when there is a need for larger numbers?

例如,如果您将两个整数相加并将结果存储在 long 中,如果 longint 的大小相同,则确实会发生溢出。这就是那些没有保证大小的类型的问题。如果您需要这样的保证,请改用 int32_tint64_t 之类的类型,它们保证分别是 32 位和 64 位。