变量名被编译器放内存
1. c语言中一个变量名在内存中是什么样子的
变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存中不存在,操作时转换成地址数存放在寄存器中了。
2. c++中为什么有些变量在编译是就由编译器分配了内存空间,还没有运行怎么会占用内存呢
还没有运行怎么会占用内存呢?!(这一点还要怀疑吗!?)
所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的常量),它们所需要的空间大小可以明确计算出来,并且不会再改变,因此它们可以直接存放在可执行文件的特定的节里(而且包含初始化的值),程序运行时也是直接将这个节加载到特定的段中,不必在程序运行期间用额外的代码来产生这些变量。
其实在运行期间再看“变量”这个概念就不再具备编译期间那么多的属性了(诸如名称,类型,作用域,生存期等等),对应的只是一块内存(只有首址和大小),所以在运行期间动态申请的空间,是需要额外的代码维护,以确保不同变量不会混用内存。比如写new表示有一块内存已经被占用了,其它变量就不能再用它了; 写delete表示这块内存自由了,可以被其它变量使用了。(通常我们都是通过变量来使用内存的,就编码而言变量是给内存块起了个名字,用以区分彼此)
内存申请和释放时机很重要,过早会丢失数据,过迟会耗费内存。特定情况下编译器可以帮我们完成这项复杂的工作(增加额外的代码维护内存空间,实现申请和释放)。从这个意义上讲,局部自动变量也是由编译器负责分配空间的。进一步讲,内存管理用到了我们常常挂在嘴边的堆和栈这两种数据结构。
最后对于“编译器分配空间”这种不严谨的说法,你可以理解成编译期间它为你规划好了这些变量的内存使用方案,这个方案写到可执行文件里面了(该文件中包含若干并非出自你大脑衍生的代码),直到程序运行时才真正拿出来执行!
3. 编译器在编译的时候做了什么给申明的变量分配内存
编译器在编译的时候是不会声明变量和分配内存的。 分配内存之类的是在运行时执行的。
一般编译器在编译的时候,只是做代码的格式检查, 然后将代码转换成机器码或中间代码。
4. C语言变量的名称是怎么存在的,在内存中么
编写C语言源程序时可以理解成通过变量名访问值,但程序必须编译成可执行的二进制文件方能运行,这时都是对内存进行存取,已不存在变量名了。
5. C语言变量名与内存空间有什么逻辑关系
当你在程序这样声明一个变量的是:
char a;
那么编译的时候,编译器会在内存中特定的位置给你这个变量申请一块空间用来存你这个变量,根据变量的作用域不同会在不同的地址,比如全局变量就会在在数据段,而函数中的局部变量一般是在堆栈中,而要是malloc就会在堆中申请新的区域。在编译的时候编译器会保存一个变量名的表,这里记录了每个变量的地址。当你使用一个变量的时候,相当于就是在这个地址的值操作了。
你可以找相关的书籍学习一下这方面的知识
6. 问一下各位,c语言编译器是如何处理变量名的呢
编译器编译到int a;时就在内存中开辟一个两字节的内存空间,并且命名为a
7. 我们经常看到书上面说的 某某变量的内存单元是编译器在编译时候分配的 是什么意思
所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的常量),它们所需要的空间大小可以
明确计算出来,并且不会再改变,因此它们可以直接存放在可执行文件的特定的节里(而且包含初始化的值),程序运行时也是直接将这个节加载到特定的段中,不
必在程序运行期间用额外的代码来产生这些变量。
其实在运行期间再看“变量”这个概念就不再具备编译期间那么多的属性了(诸如名称,类型,作用
域,生存期等等),对应的只是一块内存(只有首址和大小),
所以在运行期间动态申请的空间,是需要额外的代码维护,以确保不同变量不会混用内存。比如写new表示有一块内存已经被占用了,其它变量就不能再用它了;
写delete表示这块内存自由了,可以被其它变量使用了。(通常我们都是通过变量来使用内存的,就编码而言变量是给内存块起了个名字,用以区分彼此)
内存申请和释放时机很重要,过早会丢失数据,过迟会耗费内存。特定情况下编译器可以帮我们完成这项复杂的工作(增加额外的代码维护内存空间,实
现申请和释 放)。从这个意义上讲,局部自动变量也是由编译器负责分配空间的。进一步讲,内存管理用到了我们常常挂在嘴边的堆和栈这两种数据结构。
最后对于“编译器分配空间”这种不严谨的说法,你可以理解成编译期间它为你规划好了这些变量的内存使用方案,这个方案写到可执行文件里面了(该文件中包含若干并非出自你大脑衍生的代码),直到程序运行时才真正拿出来执行。
8. 变量名 被 编译器 映放射成 内存地址吗
是的。
编译器会将合法的变量名放到一个叫“符号表”的一个表中。
每个符号对应一个地址。当你调用此变量时,就会根据此符号表找到对应的地址,然后进行操作。
9. 用变量名会占内存空间吗
可以忽略。有时候为了代码的整洁和风格的统一需要定义变量的。java虚拟机会根据你的代码优化好去执行的,不必关心占用内存的问题。
10. 变量名占不占内存比如int a=12,这个a有没有占内存
不占,这个a是给编译器看的,用int a还是int aaaaaa对编出来的程序没影响