C++ 编译器是否调整整型大小?
我想知道在这种情况下,编译器是否会将int变量大小调整到其最大可能值?或者它将使用整个32位intC++ 编译器是否调整整型大小?,c++,types,int,C++,Types,Int,我想知道在这种情况下,编译器是否会将int变量大小调整到其最大可能值?或者它将使用整个32位int pseudocode: int func() { if (statement) return 10; else if (statement2) return 50; else return 100; } // how much memory will be alocated as it needs only 1 byte?
pseudocode:
int func()
{
if (statement)
return 10;
else if (statement2)
return 50;
else
return 100;
}
// how much memory will be alocated as it needs only 1 byte?
我将使用完整的32位(假设在这个架构中int是32位)
它是在编译时定义的我将使用完整的32位(假设在这个体系结构中int是32位)
它是在编译时定义的。函数返回
int
,分配的内存将是sizeof(int)
,而不考虑其中存储的实际值。函数返回int
,分配的内存将是sizeof(int)
,无论存储在其中的实际值是多少。是的,它将使用整个32位,因为对基元类型的内存分配是在编译时完成的。是的,它将使用整个32位,因为对基元类型的内存分配是在编译时完成的。Int32是值类型。它在编译时存储在堆栈上。如果它在任何对象中,那么它将进入堆,这是动态内存
在您的情况下,对于任何返回值,编译器将根据int32的大小(即32位)在堆栈上分配固定位来存储您的返回整数值,该值的范围为–2147483648到2147483647(如果已签名),0到4294967295(如果未签名)。int32是值类型。它在编译时存储在堆栈上。如果它在任何对象中,那么它将进入堆,这是动态内存
在您的情况下,对于任何返回值,编译器都会在堆栈上分配固定位来存储您的返回整数值,根据int32的大小,即32位,如果已签名,则范围为–2147483648到2147483647,如果未签名,则范围为0到4294967295。所需的内存取决于函数结果的使用位置。
int
使用实现定义的固定字节长度(通常为4)。@OliCharlesworth因此,如果我将其指定为short(short I=func())它会先放大整数大小,然后把它改短?或者它只是一个较短的大小?@user2843974,前者,但您必须意识到寄存器中的内容无论如何都比short
大。所需的内存取决于函数结果的使用位置。int
使用实现定义的固定字节长度(通常为4)@OliCharlesworth所以如果我将其分配给short(short I=func()),它将计算int size,然后将其转换为short?或者它只会显示较短的大小?@user2843974,前者,但您必须意识到寄存器中的内容无论如何都比short
要大。@user2843974您可以使用sizeOf交叉检查这一点opertaor@user2843974您可以首先使用sizeOf operator进行交叉检查,它是sizeOf
,而不是sizof
;第二,你所说的是“一个整数的大小就是一个整数的大小”,我几乎不认为这有用。首先,它是sizeof
,而不是sizof
;第二,你所说的只是“一个整数的大小就是一个整数的大小”,我几乎不认为这是有用的。