C++ 中的值赋值:运行时或编译时

问题描述 投票:0回答:1

我知道

constexpr
创建一个常量,该值始终在编译期间创建。但是普通变量呢?如果我这样做
int x = 1

这个变量的值是在编译时还是运行时赋值的?

c++ variables
1个回答
0
投票

对于以下仅包含一行的程序:

int main()
{
    int x = 1;
}

为 x86-64(优化级别 0)生成的汇编输出是:

main:                                   # @main
        push    rbp
        mov     rbp, rsp
        mov     dword ptr [rbp - 4], 1
        xor     eax, eax
        pop     rbp
        ret

看那条线,

mov     dword ptr [rbp - 4], 1
。这意味着它在编译时知道(因为它存在于生成的程序集中)需要将 1 移动到
x
的内存位置,因为有一条移动指令(立即寻址模式)。

© www.soinside.com 2019 - 2024. All rights reserved.