为什么删除可执行文件并在 VS Code 上重新运行后我的变量地址保持不变?

问题描述 投票:0回答:1
#include <iostream>

using namespace std;

int main() {
    int a = 5;
    int *ptr = &a;
    cout << ptr;

    return 0;
}

在 VS Code 上删除此代码的可执行文件并重新运行它时,我得到

ptr
变量的相同值,这意味着变量
a
的地址位置保持不变。然而,这怎么可能,因为编译再次发生,所以资源分配不应该再次发生,因此变量
a
的地址(以及
ptr
的值)这次会有所不同吗?

pointers memory-management compilation operating-system dynamic-memory-allocation
1个回答
0
投票

即使您重新编译了代码,编译器生成的新二进制文件也应该与原始二进制文件相同。因此,您将运行相同的二进制文件两次。

a
存在于堆栈中,并且由于您运行相同的二进制文件两次,因此
a
很可能被分配在堆栈上的相同地址处。因此,
a
可能具有相同的地址,因此
ptr
将具有相同的值。

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