【问题标题】:how much memory is allocated for a variable? [duplicate]为变量分配了多少内存? [复制]
【发布时间】:2012-11-27 11:32:39
【问题描述】:

可能重复:
Whether variable name in any programming language takes memory space

我只是在阅读有关内存分配的内容,不禁想知道这个问题:

两者都做

int x = 4;

int this_is_really_really_long_name_for_an_integer_variable = 4;

占用相同数量的内存变量占用的内存。不仅仅是sizeof(int)

我知道这个问题与“编程语言和编译器构造”有关。但是,我不必研究它:(

【问题讨论】:

  • 我认为有相同的..
  • 变量名在编译时被丢弃,取而代之的是内存地址。

标签: c variables variable-names


【解决方案1】:

通常它们占用相同数量的空间,即sizeof(int)。但是,有人可能会争辩说,在构建带有用于调试的附加符号的目标文件时,比率是不同的。变量存储的数据量不变,但调试符号在变量名较长的情况下占用更多空间。考虑以下示例。

$ cat short.c && gcc -c short.c && wc -c short.o
int x = 0;
927 short.o
$ cat long.c && gcc -c long.c && wc -c long.o
int this_is_really_really_long_name_for_an_integer_variable = 0;
981 long.o

大小的差异正是变量名称长度的差异。

不过,从运行时效率和内存使用的角度来看,这并不重要。

【讨论】:

  • 谢谢!我期待这样的答案。现在,将其与其他人所说的相关联,我认为 gcc 确实将变量的名称存储在源代码中,但是用符号替换所有下一次出现的地方。这个概念听起来非常像汇编中的符号表。我说的对吗?
  • +1 表示符号表包含变量名。但是,该名称仅由链接器和调试器使用,并且在许多情况下可以使用 strip 删除。
  • @Prasanth:编译后的程序本身不需要符号名。运行时唯一需要它的是从共享库中导出变量。
  • 另外,C 被编译成 汇编器。符号表看起来相同并非巧合。
【解决方案2】:

在 C 中?是的,这些变量将占用相同数量的空间。 变量名仅供编译器在编译时使用。

但有些语言会在运行时存储变量名。

【讨论】:

    【解决方案3】:

    变量名的长度与为其保留的存储量无关;在大多数情况下,变量名不会保留在生成的机器代码中。

    【讨论】:

      【解决方案4】:

      32 位,因为编译器不会存储你的名字。它将仅将其作为地址处理。 int 容器只占用 32 位。

      【讨论】:

        【解决方案5】:

        变量名仅在编译时用于地址绑定。
        变量名在词法处理中存储在符号表中,这是编译过程的一个阶段 一旦完成地址绑定,就不会使用变量名,并且变量名的长度无关紧要。它只需要 32 位

        【讨论】:

        • 而反引号适合在 Stack Overflow 上强调非代码
        猜你喜欢
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 2011-01-03
        • 2017-05-18
        相关资源
        最近更新 更多