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

本文是关于32位Linux系统中栈与函数调用惯例的基础篇,介绍了进程虚拟地址空间的布局,特别是用户空间和内核空间的划分,以及栈在函数调用中的作用。内容涉及保留区、代码/只读数据区、可读/写数据区、堆、共享库和栈的详细解释,同时提到了IA32的通用寄存器组在函数调用中的角色。
摘要由CSDN通过智能技术生成

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

        记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题。当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等。最近看书过程中,重新回顾了这些知识点,对整个调用栈又有了较深入的理解。作为笔记,记录于此。

        NOTICE:本文笔记以32位Linux系统为背景,可能与Windows操作系统的底层机制有些小差异(比如进程虚拟空间的布局),但总的来说,原理是相通的。

1. 进程虚拟地址空间

         犹记得当年一个困扰了自己很长时间的问题:“我的机器物理内存只有1G,为什么很多资料提到32位系统下,每个进程都拥有4G的地址空间”?更不理解的是“为啥各进程的4G地址空间还相互独立,不会冲突”?对于非计算机科班出身、当时没学过操作系统的学生来说,实在是难以理解这其中的奥妙。后来读到Andrew.S.Tanenbaum教授写的《Modern Operating Systems》一书,才有种被醍醐灌顶、豁然开朗的感觉,原来都是操作系统在背后“作怪”!在此建议对这部分概念有疑问的同学去读经典的操作系统教材,可以少走很多弯路。

         进程虚拟空间看似与本文

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值