【问题标题】:Does compiler adjust int size?编译器是否调整 int 大小?
【发布时间】:2014-01-12 11:53:14
【问题描述】:

我想知道在这种情况下,编译器是否会将 int 变量大小调整为最大可能值?还是会使用整个 32 位整数?

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?

【问题讨论】:

  • 所需的内存取决于函数结果的使用位置。
  • int 使用实现定义的固定字节长度(通常为 4)。
  • @OliCharlesworth 因此,如果我将其分配给 short (short i = func()),它将分配 int 大小,然后将其转换为 short?还是只会分配短尺寸?
  • @user2843974,前者,但你必须意识到寄存器中的内容比short大。

标签: c++ types int


【解决方案1】:

函数返回int,分配的内存将是sizeof(int),不管里面存储的实际值是多少。

【讨论】:

  • 首先是sizeof,而不是sizof;其次,您所说的只是“int的大小就是int的大小”,我认为这几乎没有用。
【解决方案2】:

我将使用完整的 32 位(假设 int 在此架构上是 32 位)。

在编译时定义

【讨论】:

    【解决方案3】:

    是的朋友,它将使用整个 32 位,因为基本类型的内存分配是在编译时完成的。

    【讨论】:

    • @user2843974 您可以使用 sizeOf opertaor 进行交叉检查
    【解决方案4】:

    Int32 是值类型。它在编译时存储在堆栈中。如果它在任何对象内部,那么它将进入动态内存堆。

    在您的情况下,对于任何返回值,编译器将根据 int32 的大小(32 位)在堆栈上分配固定位来存储您的返回整数值,如果 singed 可以具有范围 –2,147,483,648 到 2,147,483,647,0 到如果未签名,则为 4,294,967,295。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多