zoukankan      html  css  js  c++  java
  • 第四章 进程(1)

     

    进程

    A:进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:

    OS用来管理进程的内核对象(内核对象也是系统用来存放关于进程的统计信息的地方)

    •地址空间 (它包含所有可执行模块或 DLL模块的代码和数据,它还包含动态内存分配的空间)

    当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程。

    B: Windows支持两种类型的应用程序

    基于图形用户界面( GUI)的应用程序; 它能创建窗口,拥有菜单,可以通过对话框与用户打交道,并可使用所有的标准“Windows”组件。

    基于控制台用户界面(C U I)的应用程序; 通常不能用于创建窗口或处理消息,并且它们不需要图形用户界面。命令外壳程序CMD.EXE是典型的基于C U I的应用程序。

    C: Windows应用程序必须拥有一个在应用程序启动运行时调用的进入点函数。可以使用的进

    入点函数有4个:

    int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE ,

    PSTR pszCmdLine, int nCmdShow );

    int WINAPI wWinMain(HINSTANCE hinstExe, HINSTANCE ,

    PWSTR pszCmdLine, int nCmdShow );

    int _ _ cdecl main(int argc, char *argv[], char *envp[]);

    int _ _ cdecl wmain(int argc, wchar *argv[], wchar *envp[]);

     

    应用程序类型 嵌入可执行文件的启动函数

    ANSI字符和字符串的GUI应用程序 WinMain WinMainCRTStartup

    Unicode字符和字符串的GUI应用程序 wWinMain wWinMainCRTStartup

    ANSI字符和字符串的CUI应用程序 main mainCRTStartup

    Unicode字符和字符串的CUI应用程序 wmain wmainCRTStartup

     

    操作系统实际上并不调用你编写的进入点函数。它调用的是 C/C++运行期启动函数。该函数负责对C/C++运行期库进行初始化,这样,就可以调用mallocfree之类的函数它还能够确保已经声明的任何全局对象和静态C + +对象能够在代码执行以前正确地创建。

    D: 链接程序负责在它连接可执行文件时选择相应的 C / C + +运行期启动函数。

    如果设定了/SUBSYSTEM:WINDOWS该链接程序查找WinMainwWinMain函数。如果这两个函数都不存在,链接程序便返回一个“未转换的外部符号”的错误消息。否则,它选择WinMainCRTStartup函数或wWinMainCRTStartup函数。

    如果设定了/SUBSYSTEM : CONSOLE该链接程序查找mainwmain函数,并选择 mainCRTStartup函数或wmainCRTStartup函数。同样,如果mainwmain都不存在,那么链接程序返回一条“未转换外部符号”的消息。

    如果从应用程序中全部删除 /SUBSYSTEM链接程序开关。链接程序能够自动确定应用程序应该连接到哪个子系统。当进行链接时,链接程序要查看代码中存在4个函数(WinMainwWinMain,main,wmain)中的哪一个。然后确定可执行程序应该是哪一个子系统,并且确定可执行程序中应该嵌入哪个 C/C++启动函数。

    E: 启动函数的功能如下:

    检索指向新进程的完整命令行的指针。

    检索指向新进程的环境变量的指针。

    C/C++运行期的全局变量进行初始化。若包含了StdLib.h文件,代码就能访问些变量。

    C运行期内存单元分配函数(malloccalloc)和其他低层输入/输出例程使用的内存栈进行初始化。

    为所有全局和静态C + +类对象调用构造函数。

    F: 当所有这些初始化操作完成后,C/C++启动函数就调用应用程序的进入点函数。当进入点函数返回时,启动函数便调用C运行期的e x i t函数,将返回值(n M a i n R e t Va l)传给它。 E x i t函数负责下面的操作:

    调用由_ o n e x i t函数的调用而注册的任何函数。

    为所有全局的和静态的C + +类对象调用析构函数。

    调用操作系统的ExitProcess函数,将nMainRetVal传递给它。这使得该操作系统能够撤消进程并设置它的e x i t代码。

  • 相关阅读:
    面试题
    面向切面编程 AOP
    matlab提取wind底层数据库操作
    tensorflow(4):神经网络框架总结
    tensorflow(3):神经网络优化(ema,regularization)
    tensorflow(2):神经网络优化(loss,learning_rate)
    tensorflow(1) 基础: 神经网络基本框架
    在anaconda中安装tensorflow
    anaconda利用pip安装module
    python(10): xlsxwriter模块
  • 原文地址:https://www.cnblogs.com/dyufei/p/2574011.html
Copyright © 2011-2022 走看看