进程的定义:正在运行的一个程序的实例
进程的构成:由进程对象和地址空间构成,进程对象负责存储进程的统计信息,地址空间存放着进程的代码和数据
我对进程的理解,由于进程是不活泼的,活泼的是进程里面的线程。所以,进程相当于一个容器,只有里面有东西(线程),该容器才有存在的必要,如果里面的东西用光了(线程全部终止运行),瓶子就被回收(进程的地址空间就被系统回收或重新分配给新的进程)
多任务抢占式操作系统:每个进程都有线程,每个线程都有自己的CPU寄存器和堆栈,操作系统通过循环分配给每个线程时间片,来维持线程的执行,由于速度非常快,造成了一种假象,这些任务都是同时执行的
加载程序怎么看一个程序是CUI(cmd窗口)程序还是GUI(图形界面)程序
1.看link标志:如果是CUI程序,则器标志为/subsystem:console,否则为/subsystem:windows
vs2013
vc0.6
2.如果没有link标志,则看你的入口函数的函数名,
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,PSTR pszCmdLine,int nCmdShow);
int wWINAPI WinMain(HINSTANCE hInst,HINSTANCE,PWSTR pszCmdLine,int nCmdShow);
int _cdcel main(int argc,char* argv[],char* envp[]);
int _cdcel wmain(int argc,char_t* argv[],char_t* envp[]);
如果找到的函数是main和wmain则程序编译为CUI程序,反之则为GUI程序
所以,如果创建工程时不小心弄错了工程类型,只需删掉link标志,系统就可根据入口函数动态设置工程类型
系统在启动进程时并不是简单的直接进入入口函数(这点在程序退出时也会提到)
c/c++有一个运行期启动函数,它主要负责:
1.检索程序的命令行的指针
2.检索程序的环境块的指针
3.对全局变量进行初始化(非c++对象)
4.对内存分配函数使用的堆栈进行初始化
5.为所有全局和静态c++对象使用构造函数
当程序正常退出时(由入口点函数返回),调用运行期退出函数
1.调用由_onexit函数而注册的任何函数
2.执行所有全局或者静态c/c++对象的析构函数
3.调用ExitProcess函数,将入口点函数的返回值设为它的参数,这样就使得操作系统撤销进程,并设置它的exit代码
以上全局变量,在windows核心编程中设定为再stdlib.h中,但经实际测试在windows xp中用vc6.0编译可通过,在win7中使用vs2013无法识别,如果读者能够知道其中的原因,请在下方评论