C语言:全局变量和局部动态变量,编译后逻辑地址就确定了吗? 50
看到别人的回答:“所有的程序都是在运行阶段分配内存,所有变量的逻辑地址都在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的...
看到别人的回答:
“所有的程序都是在运行阶段分配内存,所有变量的逻辑地址都在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。”
请问他说的对吗?
编译后,无论是全局变量还是局部变量,逻辑地址就确定了吗?但分配地址是在程序执行的时候? 展开
“所有的程序都是在运行阶段分配内存,所有变量的逻辑地址都在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。”
请问他说的对吗?
编译后,无论是全局变量还是局部变量,逻辑地址就确定了吗?但分配地址是在程序执行的时候? 展开
展开全部
局部变量是堆栈
例如
{
int a;
}
进入{ } 就push a入栈 就有了a这个变量
出了{ } 就pop a出栈 a这个变量就消失了
所有局部变量的生命周期就就在{ }内
全局变量
在程序运行期间一直存在没错,放在数据区
可是具体装在哪个位置是系统为你分配的
而且不是编译后确定
编译是将c代码转为汇编代码
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程
汇编后还有链接
编译前还有预编译
全手工打造 希望能帮到你
满意请采纳
例如
{
int a;
}
进入{ } 就push a入栈 就有了a这个变量
出了{ } 就pop a出栈 a这个变量就消失了
所有局部变量的生命周期就就在{ }内
全局变量
在程序运行期间一直存在没错,放在数据区
可是具体装在哪个位置是系统为你分配的
而且不是编译后确定
编译是将c代码转为汇编代码
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程
汇编后还有链接
编译前还有预编译
全手工打造 希望能帮到你
满意请采纳
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对啊,整个程序运行的地址要在运行时由操作系统来分配的,而逻辑地址则是在编译时就定下了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有兴趣你可以看一下操作系统. 这些东西在操作系统原理都有详细解释,这里我可以简单说一下.
操作系统有一项重要的技术就是操作系统虚拟机,它为每一个程序虚拟的一台计算机.这给了程序一个环境,让它觉得整个计算机的资源都是他家的.传统的基于x86架构的32位系统,应用程序都有4G的虚拟内存.操作系统负责虚拟地址到物理地址的映射.至于内存分配,当然是程序员编写程序时就计划好了的,或者编译器帮他规划好了的.不知道这么说你清楚不.
操作系统有一项重要的技术就是操作系统虚拟机,它为每一个程序虚拟的一台计算机.这给了程序一个环境,让它觉得整个计算机的资源都是他家的.传统的基于x86架构的32位系统,应用程序都有4G的虚拟内存.操作系统负责虚拟地址到物理地址的映射.至于内存分配,当然是程序员编写程序时就计划好了的,或者编译器帮他规划好了的.不知道这么说你清楚不.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询