例如,在C中定义变量时,存储该变量的内存地址在哪里?

时间:2012-12-23 21:29:07

标签: c memory binary computer-science ram

如果我在C中定义一个变量(即unsigned short int n = 5),那么该值将以二进制形式存储在用户RAM的某处(在这种情况下,它看起来像0000 0000 0000 0101)。存储该值的位置具有也是二进制的地址。 (即,值5可以存储在例如0010处,这意味着它在RAM中使用0010和0011,因为它使用2个字节)。变量n的名称表示存储该值的内存地址。存储的内存地址在哪里?那会不会占用更多的公羊?如果确实如此,那么该地址也不必有地址吗?

2 个答案:

答案 0 :(得分:21)

变量的内存地址不直接存储在内存中。它是访问变量的代码的一部分。根据具体情况,它可以是偏移量(距离已知位置的距离 - 例如局部变量的堆栈指针,全局变量可能是程序计数器)或绝对地址(仅适用于全局变量)。

如果您希望变量存储变量的地址,那么是的,您也需要该变量的内存。这种类型的变量称为指针。

答案 1 :(得分:1)

这取决于几个因素,例如分配方法(堆栈或静态),如何访问变量,但让我们假设这段代码:

static int n = 5;
printf("%p\n", &n);

在这种情况下,n的地址存储在代码段中,其中调用了printf。如果您反汇编代码,您将在调用push之前找到printf指令,将地址推送到堆栈。被推送的地址是n的地址(它是被推送的两个地址之一,还有格式字符串)。

正如我上面所说,它并不总是一样的。不同的体系结构和编译标志(例如-fpic)可以改变它 此外,如果变量在堆栈上,或者对它的引用不是来自代码,而是来自数据(例如int n=5; int *p = &n;),那么事情就会发生变化。