可能重复:
任何编程语言中的变量名是否占用内存空间
我只是在阅读有关内存分配的内容,不禁想知道这个问题:
两者都做
int x = 4;
和
int this_is_really_really_long_name_for_an_integer_variable = 4;
占用相同数量的内存(变量占用的总内存。不只是)sizeof(int)
我知道这个问题与“编程语言和编译器构造”有关。但是,我不必研究它:(
可能重复:
任何编程语言中的变量名是否占用内存空间
我只是在阅读有关内存分配的内容,不禁想知道这个问题:
两者都做
int x = 4;
和
int this_is_really_really_long_name_for_an_integer_variable = 4;
占用相同数量的内存(变量占用的总内存。不只是)sizeof(int)
我知道这个问题与“编程语言和编译器构造”有关。但是,我不必研究它:(
在 C? 是的,这些变量将占用相同数量的空间。变量名仅由编译器在编译时使用。
但是有些语言在运行时存储变量名。
一般来说,它们占据相同数量的空间,即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
大小的差异正是变量名称长度的差异。
不过,从运行时效率和内存使用的角度来看,这并不重要。
变量名的长度与为其保留的存储量无关;在大多数情况下,变量名不会保留在生成的机器代码中。
32 位,因为编译器不会存储你的名字。它将仅将其作为地址处理。int 容器仅占用 32 位。
变量名仅用于编译时的地址绑定。
变量名称在词法处理中存储在符号表中,这是编译器过程的一个阶段,一旦完成地址绑定,就不会使用变量名称,并且变量名称的长度无关紧要。它只需要 32 位