关于过程存储器中的变量

时间:2014-02-26 06:54:07

标签: c memory-management

在以下代码中:

int main()
{
     int i;
     char* s = "Hello";
     i = 10;
}

在记忆中:

  • 10应该进入堆栈

  • "hello"的地址应该进入堆栈

  • "Hello"应存储在只读内存

在流程记忆中,is在哪里。他们住在哪里?

3 个答案:

答案 0 :(得分:1)

变量名只是程序员的便利,所以他可以参考它们。它们的值存储在编译器认为适合放置它们的任何地方,但名称将被丢弃。 如果优化器确定某个变量的范围足够小并且有足够的寄存器可用,那么您引用为i的变量甚至可能在进程内存中没有存储位置,因为它可以保存在注册。

所以它主要取决于编译器决定,某个变量在哪里。静态和全局变量总是在进程内存中,但局部变量可能不在堆栈中。

答案 1 :(得分:0)

对于这个程序:

  • 本地范围的变量 is位于堆栈中。
  • 字符串"Hello"存储在程序.rodata部分。
  • 10 $10i)和"Hello"字符串的地址({在.LC0功能序言中,s的{​​{1}}被初始化为is

你可以看到这一切都发生在例如main将输出gcc -S -o bar.s bar.c的汇编语言代码:

bar.c

答案 2 :(得分:0)

这里的i和s是局部变量,因此它们存储在堆栈段中。通过引用i和s,这里只是语言中的表示。