任何编程语言中的变量名是否占用内存空间

Gur*_*uri 6 c++ language-agnostic programming-languages

例如

int a=3;//-----------------------(1)
Run Code Online (Sandbox Code Playgroud)

int a_long_variable_name_used_instead_of_small_one=3;//-------------(2)
Run Code Online (Sandbox Code Playgroud)

在(1)和(2)中将获得更多的存储空间或相等的空间将获得?

Fer*_*cio 18

在C++和大多数静态编译的语言中,变量名称在编译过程中可能占用更多空间,但是通过运行时,名称将被丢弃,因此根本不占用任何空间.

在提供运行时内省/反射的解释语言和编译语言中,名称可能占用更多空间.

此外,语言实现将影响空间变量名称占用的空间.实现者可能已决定对每个变量名使用固定长度的缓冲区,在这种情况下,无论长度如何,每个名称都占用相同的空间.或者他们可能根据长度动态分配空间.

  • 是的,它使文件大小更大,除非你在调试器下运行,否则不会占用更多的内存 (3认同)

Nic*_*yer 8

两者都占用相同的内存量.变量名只是为了帮助您,程序员,记住变量的用途,并帮助编译器关联同一变量的不同用法.除了调试符号之外,它们在编译的代码中没有出现.

  • 既然他已将问题标记为与语言无关(以及其他语言),那么在运行时支持反射的语言怎么样呢? (7认同)
  • 请注意,如果启用RTTI,类/结构名称可能很重要,因为在这种情况下它们的名称必须存储在可执行文件中.编辑:只是为了说清楚,我在谈论C++. (2认同)

tro*_*skn 6

在大多数解释语言中,名称将存储在内存中的某个表中,从而占用不同的空间量.


Mar*_*all 5

您在C/C++中为变量赋予的名称不会影响生成的可执行代码的大小.当您声明一个这样的变量时,编译器会保留内存空间(在x86/x64上为int,四个字节)以存储该值.要访问或更改该值,它将使用地址而不是变量名称(在编译过程中丢失).