Advertisement

Linux学习笔记 栈与函数调用惯例 上 篇

阅读量:

栈与函数调用惯例(又称调用约定)— 基础篇

回想起去年半学期在百度校园招聘面试中,在被问及有关函数调用约定的问题时

NOTICE:我的这篇笔记基于32位Linux系统的分析,并指出了其可能与Windows操作系统的底层机制存在一些细微差别(如进程虚拟空间的布局),但总体上其运行原理具有相似性

1. 进程虚拟地址空间

回想起过去多年的一个长期困扰自身的问题:我的机器仅配备1GB的物理内存。众多参考资料却指出,在32位操作系统中,默认情况下每个进程都可分配4GB的内存空间。感到不解的是为何各进程的4GB内存空间能够保持独立且互不冲突的状态?对于那些未系统学习过计算机原理及操作系统的同学而言,这实在难以 grasp 这个概念的核心机理。后来通过阅读 Andrew.S.Tanenbaum 教授所著的经典著作《Modern Operating Systems》,才感受到这本书带来的深邃见解与全新的认知。如有疑问的同学不妨深入研读经典的操作系统教材

看起来与本文的主题似乎没有直接关联。然而如果不建立一个全面的概念框架去理解进程空间的话,掌握函数调用栈的过程中容易陷入‘细节主导、全局视角缺失’的理解误区。这些心得是在我的自主学习过程中逐渐积累起来的体会,因此在学习过程中难免会有一些冗长啰嗦的内容出现。

Linux系统中,进程的虚拟地址空间典型布局如下图所示。

全部评论 (0)

还没有任何评论哟~