C/C++点滴 - 2010-11-3

本文介绍了Win32程序的基本概念,包括进程、程序与线程的区别,内核对象与Handle的作用,以及程序从加载到执行的具体流程。还讨论了不同调用约定的主要差异。

 

《Windows程序设计》复习:

 

Chap 2, Win32程序运行原理

 

1. 进程、程序与线程

程序是一个文件,比如,一个.exe文件,是一种静态的代码

进程是程序的一个实例(正在运行的程序),存在内存中,有自己的虚拟地址空间(比如,32位系统是4G),并被OS分配一定的资源,如代码段,数据段及文件Handle等其它资源

线程是进程内执行代码的独立实体;一个进程至少有一个线程,否则就会被销毁。

 

2. 内核对象与Handle

Handle是一个数字,代表一个内核对象(一种OS内核才参访问的数据结构)

 

3. 一个程序被执行的过程

任何一个程序执行,实质都是调用系统调用CreateProcess --------- 无论用户程序调用或者是Shell调用

CreateProcess大致过程如下:

   

* 根据参数确定程序文件名

* 创建一个进程内核对萌

* 创建进程虚拟地址空间,装载文件内容,为其分配代码段、数据段及其它资源

* 创建主线程内核对象

* 在主线程中执行C/C++ Runtime启动代码(做一些初始化)

* Runtime调用入口函数main(...),程序启动完成。

 

4. 重要数据结构

STARTUPINFO

LPROCESS_INFORMATION

 

 

## 一些零星的知识点

 

1. WINAPI, __stdcal, __cdelc, __pascal

 

主要区别:

      参数入stack顺序

      调用者还是被调用者谁来管理clear stack

 

WINAPI = __stdcall,所有Windows回调函数都必须使用此约定

 

一个比较好的解释文章:http://zhidao.baidu.com/question/107145682.html?fr=qrl&cid=868&index=1

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值