自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 程序是从main开始吗?

并不是的。。。一个典型的程序运行步骤如下:1、操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库的中的某个入口函数。2、入口函数对运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量构造,等等。3、入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分。4、main函数执行完毕之后,返回到入口函数,入口函数进行清理工作,包括全局变量西沟、堆销毁、关闭I/O...

2018-05-19 12:32:11 1040

原创 线程详解

线程:是程序执行流的最小单元。一个标准的线程有线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。一个进程由一到多个线程组成,各个线程之间共享程序的内存空间(代码段、数据段、堆等)及一些进程级资源(打开文件和信号)。进程内的线程:使用多线程原因:1、某个操作可能会陷入长时间等待,等待的线程会将进入睡眠状态,无法继续执行。多线程执行可以有效利用等待的时间。2、某个操作(如计算)会消耗大量的时间,如...

2018-05-22 21:19:40 327

原创 Windows API

Windows API为什么要使用Windows API?本着”要解决问题就加层的万能法则“,Windows作为一个商业操作系统,对应用程序的向后兼容性必须做好。而系统调用实际是非常依赖于硬件结构的一种接口,受到硬件的严格限制,比如寄存器的数量、调用时的参数传递、中断号、堆栈切换等。若硬件结构稍微改变,大量的应用程序可能会出现问题(特备是那些与CRT静态链接在一起的)。 直接使用系统调用作为程序接...

2018-05-22 21:16:13 1336

原创 线程私有与共享

线程私有:栈(局部变量,函数的参数)线程局部存储(Thread Local Storage,TLS)。有限的容量寄存器 (执行流的基本数据)TLS的用法很简单,如果要定义一个全局变量为TLS类型,只需在她定义前加上相应的关键字即可。对于GCC来说, _thread int number;对MSVC来说, _declspec(thread) int number;一旦一个全局变量被定义程...

2018-05-22 21:09:53 3955

原创 C语言运行库标准库

C语言运行库大致包含如下 功能:启动与退出:包括入口函数和入口所依赖的其他函数等。标准函数:由C语言标准规定的C语言标准库所拥有的函数实现。I/O:I/O功能的封装和实现。堆:堆的封装和实现。语言实现:语言中一些特殊功能的实现。调试:实现调试功能的代码。C语言标准库:stdio.h——标准输入输出 、文件操作ctype.h——字符操作string.h——字符串操作math.h——数字函数stdli...

2018-05-19 12:34:09 1459

原创 程序的内存分布

32位的系统中,内存空间拥有4GB(2的32次方)的寻址能力。大多数的操作系统都会将内存空间 中的一部分挪给内核使用,应用程序无法直接访问这一段内存。Windows默认情况会将高地址的2GB空间分给内核,而Linux默认会将高地址的1GB空间分配给内核,剩下的空间被称为内存空间。一般来说,应用程序内存空间会有下面默认区域:栈:用于维护函数调用的上下文,离开栈函数调用就无法实现通常,局部变量也将不存...

2018-05-15 13:34:23 242

原创 静/动态链接的具体实现过程

静态链接具体实现过程:ELF的静态链接机制在Linux下的实现。首先操作系统会读取可执行文件的头部,检查文件的合法性,然后从头部中的“Program Header”中读取每个“Segment”的虚拟地址、文件地址和属性,并将它们映射到进程虚拟空间的相应位置,接着操作系统就会把控制权交给可执行文件的入口地址,然后程序开始执行。动态链接具体实现过程:ELF的动态链接机制在Linux下的实现。首先操作系...

2018-05-08 11:21:22 398

原创 深入静态链接与动态链接

静态链接 :不同的程序开发者和部门能够相对独立地开发和测试自己的程序模块,大大促进了程序开发效率。优点:1、代码装载速度快,执行速度略比动态链接库快; 2、只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题。 缺点:1、浪费内存和磁盘空间、模块更新困难;2、会给对程序的更新、部署和发布带来很多麻烦。例如:在多进程操作系统情...

2018-05-07 13:13:24 200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除