int字节大小是固定的还是在C/C++中相应地占用它?
Is int byte size fixed or it occupy it accordingly in C/C++?
我看到一些程序使用 int
而不是 int16_t
或 uint8_t
等其他类型,即使不需要使用 int
举个例子,当你把9
赋值给一个int
,我知道9
只需要1个字节来存储,所以其他3个字节可以免费使用还是他们被占用了?
我要说的是,int
是否总是在内存中占用 4 个字节,或者它相应地占用一个字节,而 4 个字节是最大大小
我希望你明白我在说什么。
类型的大小在编译时是固定的。没有“动态调整大小”。如果您告诉编译器使用 int
,它将使用保证至少有 16 位宽度的整数类型。但是,它可能(而且大部分时间)更多地取决于您使用的平台和编译器。您可以使用 sizeof(int)
.
查询平台上的字节宽度
中有关于不同整数类型宽度的简洁概述
int16_t
或 uint8_t
不是核心语言类型,而是便利库定义的类型,如果需要精确的位宽(例如,用于按位算术),可以使用它们
int
没有“空闲字节”。 int
至少有 16 位宽,具体大小取决于目标平台(参见 https://en.cppreference.com/w/cpp/language/types)。 sizeof(int)
是一个编译时间常数。它总是占用相同数量的字节,无论它持有什么值。
固定宽度整数类型 (https://en.cppreference.com/w/cpp/types/integer) 对于假定一定大小的整数的代码很有用,因为假定一定大小的 int
通常是一个错误。 int16_t
正好是 16 位宽,uint8_t
正好是 8 位宽,与目标平台无关。
所有类型的大小都是不变的。您存储在整数中的值对类型的大小没有影响。如果您存储的正值小于单个字节可表示的最大值,则更重要的字节(如果有)将包含零值。
int
的大小不一定是4个字节。整数类型的字节大小是实现定义的。
I have seen some program that use int instead of other type like int16_t or uint8_t even though there is no need to use int
这有时被称为“马虎输入”。 int
的缺点是它的大小是 implementation-defined,因此它不可移植。理论上它甚至可以使用奇异的符号格式(至少在 C23 标准之前)。
when you assign 9 to an int, i know that 9 takes only 1 byte to store
这是不正确的,任何地方都没有空闲字节。给定一些代码 int x = 9;
那么整数常量 9
是 int
类型并且占用与一个一样多的 space ,除非编译器决定将其优化为更小的类型。 9
存储在 read-only 内存中,通常与 .text
段中的可执行代码一起存储。
变量 x
恰好占用 sizeof(int)
字节(在 32 位系统上为 4 字节),无论存储的值如何。编译器无法对大小进行任何合理的优化,除非可以完全删除变量。
我看到一些程序使用 int
而不是 int16_t
或 uint8_t
等其他类型,即使不需要使用 int
举个例子,当你把9
赋值给一个int
,我知道9
只需要1个字节来存储,所以其他3个字节可以免费使用还是他们被占用了?
我要说的是,int
是否总是在内存中占用 4 个字节,或者它相应地占用一个字节,而 4 个字节是最大大小
我希望你明白我在说什么。
类型的大小在编译时是固定的。没有“动态调整大小”。如果您告诉编译器使用 int
,它将使用保证至少有 16 位宽度的整数类型。但是,它可能(而且大部分时间)更多地取决于您使用的平台和编译器。您可以使用 sizeof(int)
.
int16_t
或 uint8_t
不是核心语言类型,而是便利库定义的类型,如果需要精确的位宽(例如,用于按位算术),可以使用它们
int
没有“空闲字节”。 int
至少有 16 位宽,具体大小取决于目标平台(参见 https://en.cppreference.com/w/cpp/language/types)。 sizeof(int)
是一个编译时间常数。它总是占用相同数量的字节,无论它持有什么值。
固定宽度整数类型 (https://en.cppreference.com/w/cpp/types/integer) 对于假定一定大小的整数的代码很有用,因为假定一定大小的 int
通常是一个错误。 int16_t
正好是 16 位宽,uint8_t
正好是 8 位宽,与目标平台无关。
所有类型的大小都是不变的。您存储在整数中的值对类型的大小没有影响。如果您存储的正值小于单个字节可表示的最大值,则更重要的字节(如果有)将包含零值。
int
的大小不一定是4个字节。整数类型的字节大小是实现定义的。
I have seen some program that use int instead of other type like int16_t or uint8_t even though there is no need to use int
这有时被称为“马虎输入”。 int
的缺点是它的大小是 implementation-defined,因此它不可移植。理论上它甚至可以使用奇异的符号格式(至少在 C23 标准之前)。
when you assign 9 to an int, i know that 9 takes only 1 byte to store
这是不正确的,任何地方都没有空闲字节。给定一些代码 int x = 9;
那么整数常量 9
是 int
类型并且占用与一个一样多的 space ,除非编译器决定将其优化为更小的类型。 9
存储在 read-only 内存中,通常与 .text
段中的可执行代码一起存储。
变量 x
恰好占用 sizeof(int)
字节(在 32 位系统上为 4 字节),无论存储的值如何。编译器无法对大小进行任何合理的优化,除非可以完全删除变量。