注册 登录
编程论坛 C语言论坛

变量内存问题

wolf_55555 发布于 2019-08-12 10:57, 2413 次点击
菜鸟求教
例如int型,分配内存32位,这32位内存只储存变量值吗?
变量的名字会存在哪里?
5 回复
#2
wufuzhang2019-08-12 11:21
代码要经过预处理,编译,链接生成机器可以执行的指令(这个过程实际上可能会更复杂):
在这过程中,所有的变量都被替换成他们所对应的内存地址,
运行程序时,在内存中的程序代码区(存放代码的地方),
直接操作变量的内存地址,根本不需要变量名。
变量名只是给程序员看的。
#3
zbjzbj2019-08-12 18:17
完全编译以后,变量名是不保留的,所有的变量名都编译成变量1,变量2,变量3,。。。对于每个变量,计算机会百分之百找到他的对应内存地址。
计算机比人记性好,不需要用一些特定意义的符号来记忆变量,他不觉得枯燥无味,艰涩难懂。
计算机比人笨的是,你必须告诉他这个变量是整形、实型等数据类型,他不会自己识别。
比如他不知道这个变量代表的是人,不能撕两半,如果你不告诉他是整形数据,他就会装傻。
你一旦指定这个变量是整形,那他就会在指定变量地址的以后四个字节中寻找这个数值。这就是计算机编程必须考虑字节的原因之一。
变量名存在哪?符号表里或者叫其他表吧,记不清楚了。
如果愿意深究,用十六进制编辑器,打开exe文件,看一下exe文件结构,数据存储方式等等会弄清楚的。
至于本人,清楚过,现在又不清楚了,所以只能抛个砖头。
#4
hoodlum19802019-08-15 15:42
这个要根据你的变量的声明进行区分。
全局变量和函数内声明的 static 变量:放在同一个可读可写的 segment。
函数内声明的临时变量:放在当前线程的栈上。访问时形如: [esp / ebp + xxx] 的形式。
因此,int 变量的名字在编译后是不存在的。只能说他的存储位置/地址。
#5
你们都要疼我哦2019-08-16 20:16
以前清楚过  现在全不清楚了
#6
wolf_555552019-09-21 10:08
谢谢大家的解答,随着学习的深入,也会了解的越来越清楚!
1