C语言:全局变量和局部动态变量,编译后逻辑地址就确定了吗? 50

看到别人的回答:“所有的程序都是在运行阶段分配内存,所有变量的逻辑地址都在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的... 看到别人的回答:
“所有的程序都是在运行阶段分配内存,所有变量的逻辑地址都在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。”

请问他说的对吗?
编译后,无论是全局变量还是局部变量,逻辑地址就确定了吗?但分配地址是在程序执行的时候?
展开
 我来答
tattackor
推荐于2016-02-23 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:900万
展开全部
1、逻辑地址是确定了,但是物理地址是运行时候决定。
2、在C语言里面,局部变量,全局变量都是存贮在栈(stack)里面的,
而所有用malloc和new这种操作符动态分配的空间则都是存贮在堆(dump)里面的,
举个简单的例子:
int *ptr;
ptr =(int*)malloc(100*sizeof(int));
这两句中,ptr这个指针变量是存贮在栈里面,但是他所指向的内容则是在堆里面。明白了吗
我姐是恐龙
2013-02-23 · TA获得超过542个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:198万
展开全部
局部变量是堆栈
例如
{
int a;

}
进入{ } 就push a入栈 就有了a这个变量
出了{ } 就pop a出栈 a这个变量就消失了
所有局部变量的生命周期就就在{ }内

全局变量
在程序运行期间一直存在没错,放在数据区
可是具体装在哪个位置是系统为你分配的
而且不是编译后确定
编译是将c代码转为汇编代码
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程
汇编后还有链接
编译前还有预编译

全手工打造 希望能帮到你
满意请采纳
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2013-02-23 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
对啊,整个程序运行的地址要在运行时由操作系统来分配的,而逻辑地址则是在编译时就定下了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fnwzk
2013-02-23 · TA获得超过494个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:443万
展开全部
有兴趣你可以看一下操作系统. 这些东西在操作系统原理都有详细解释,这里我可以简单说一下.
操作系统有一项重要的技术就是操作系统虚拟机,它为每一个程序虚拟的一台计算机.这给了程序一个环境,让它觉得整个计算机的资源都是他家的.传统的基于x86架构的32位系统,应用程序都有4G的虚拟内存.操作系统负责虚拟地址到物理地址的映射.至于内存分配,当然是程序员编写程序时就计划好了的,或者编译器帮他规划好了的.不知道这么说你清楚不.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式