C/C++中,常数是怎么产生的?在内存中没有地址吗?
如,inta=5;那么5是从哪里来的,它在内存中有地址吗?我知道变量a是内存地址的抽象。我想知道赋值语句的具体执行过程。...
如,int a = 5;那么5是从哪里来的,它在内存中有地址吗?我知道变量a是内存地址的抽象。我想知道赋值语句的具体执行过程。
展开
2个回答
展开全部
这方面没有什么实践,只能结合书本和自身的理解来回答一下
可以把 程序代码文件理解为 指导编译器生成 指令序列文件的文本文件,计算机实际上是按照一条一条指令序列来工作的。
高级语言中的 变量 ,例如本例中的 a ,在生成指令序列后 并没有 a 这个文本。
int a = 5 就表示 给某个内存地址上的 一个或几个字节 置为 5(实际上当然是二进制的,至于是什么样的编码形式,因所指定的类型不同而不同,这就是int a = 5和 float a = 5 的区别,这个学C语言应该会讲的。但最终在内存中的位序列是什么样的还和具体的CPU类型相关),后边的源代码中用到这个a的时候,实际上就是对这个地址上的值进行操作,
如 a += 1,在编译后的 指令序列中,就是将 a所代表的该内存地址上的值 送入CPU,自增1后又存回去(这里边又涉及到缓存,寄存器之类的)
综上所述,最终指令序列和a没有关系, a只是指导 编译器生成相应代码序列时使用。
可以把 程序代码文件理解为 指导编译器生成 指令序列文件的文本文件,计算机实际上是按照一条一条指令序列来工作的。
高级语言中的 变量 ,例如本例中的 a ,在生成指令序列后 并没有 a 这个文本。
int a = 5 就表示 给某个内存地址上的 一个或几个字节 置为 5(实际上当然是二进制的,至于是什么样的编码形式,因所指定的类型不同而不同,这就是int a = 5和 float a = 5 的区别,这个学C语言应该会讲的。但最终在内存中的位序列是什么样的还和具体的CPU类型相关),后边的源代码中用到这个a的时候,实际上就是对这个地址上的值进行操作,
如 a += 1,在编译后的 指令序列中,就是将 a所代表的该内存地址上的值 送入CPU,自增1后又存回去(这里边又涉及到缓存,寄存器之类的)
综上所述,最终指令序列和a没有关系, a只是指导 编译器生成相应代码序列时使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询