c++ - 局部变量的相对内存位置

标签 c++ c

这是那些烦人的问题之一,但我只是为了了解而想知道。

声明局部函数变量时,声明的顺序对于这些变量相对于彼此在内存中的存在位置是否有任何影响?可以根据 a 和 b 的声明顺序来确定它们的相对内存位置(如下)吗?

我读到,顺序确实有所不同,因为稍后声明的变量(如下面的 b)将具有比之前声明的变量(如下面的 a)更低的内存地址。然而,根据我的实验,我得到了不同的结果。

这是完全随机的还是可以根据声明顺序确定相对内存位置(即“&a 始终是比 &b 更低的内存地址”)?

例如:

int func()
{
    int a = 0;
    char b = 'C';

    b = 'D';
    return ++a;
}

最佳答案

简而言之,这完全取决于编译器。它还取决于目标平台、优化选项等。

此外,变量甚至可能没有地址(因为它已经被优化掉,存在于寄存器等中)。

在您的具体示例中,我的编译器不会为 ab 分配任何存储空间,因此无法说明它们的相对地址。

关于c++ - 局部变量的相对内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231606/

相关文章:

c++ - 构造函数带参数时如何实例化模板类

c - 为什么我的字数不正确?

无法使 PTRACE_SEIZED(ptrace request) 工作

c - 无法在 OpenCV 中检测网络摄像头

c++ - 我可以一直使用 1 位 boolean 值吗?

c++ - 能够编译运行。但是,运行代码时它无法打印我想打印的任何值

C struct中的c++字符串是否非法?

c++ - 如何限制在 VS 设计器中创建的编辑框中的数字

c - Linux 内核模块/IOCTL : inappropriate ioctl for device

使用 as88 汇编程序从汇编代码调用 C 函数