设为首页 加入收藏

TOP

Linux和Windows的内存组织方式
2014-11-24 12:07:23 来源: 作者: 【 】 浏览:0
Tags:Linux Windows 内存 组织 方式

先看一道爱立信的笔试题,分析程序死循环的原因。


原因如下:


这道题目涉及到内存区间开辟的问题了,程序在内存中的形式为:代码区,全局数据区,堆区和栈区。程序代码区存放函数体的二进制代码。全局区(静态区)(static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。堆区(heap)一般由程序员分配(new)释放(delete),若程序员不释放,程序结束时可能由OS回收。(注意它与数据结构中的堆是两回事,分配方式倒是类似于链表)。栈区就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。


到这里基本已经回答除了上面那道程序题,但是,真的是这样吗?It's dependent! 我把这题改动了一下,发到一个技术讨论群里,让大家分析程序的输出结果(故意不告诉他们是死循环)很快就有人发现问题了,在linux下确实会死循环,但是在windows下却能正确输出,最后讨论的结论就是windows和linux内存组织形式不同,到底有什么不同呢?


下面的图片就是我查证的结果



至此,这个问题就很明白了,这再次说明一个问题——实践出真知。还有一个类似的问题,经常有如下面试题,问为什么输出结果是1?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言细节 下一篇Android Looper和Handler分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)