代码改变世界

第二十一章 线程局部存储区

2018-03-14 21:14 by szn好色仙人, 172 阅读, 0 推荐, 收藏, 编辑
摘要://1. 可以使用线程局部存储区(TLS)来将数据与线程关联起来 //2.静态TLS #include #include #include #include //静态TLS __declspec (thread) int nCount = 0; unsigned int __stdcall FunThread0(void* pVoid) { int nAddr = reint... 阅读全文

第二十章 DLL高级技术

2018-03-14 20:30 by szn好色仙人, 335 阅读, 0 推荐, 收藏, 编辑
摘要://1. (A):为了让线程能够调用DLL模块中的函数,我们必须将DLL的文件映像映射到调用线程所在的进程的地址空间,有两种方式可以达到此目的: (1):直接让应用程序的源代码引用DLL中所包含的符号,这使得加载程序会在应用程序运行的时候隐式地载入并链接所需DLL (2):在应用程序运行过程中,显示的载入所需的DLL并显示地与想要的输出符号进行链接(此方法不需要用到lib文件) (B): H... 阅读全文

第十九章 DLL基础

2018-03-10 21:33 by szn好色仙人, 163 阅读, 1 推荐, 收藏, 编辑
摘要://1. DLL构建:选择 Win32 控制台应用程序 -> DLL(附加选项里 勾选上 空项目) //2. Windows 应用程序编程入口(API)提供的所有函数都包含在DLL中。其中三个最重要的DLL: Kernel32.dll:包含的函数用来管理内存、进程以及线程 User32.dll:包含的函数用于执行与界面相关的任务 GDI32.dll:包含的函数用来绘制图像和显示文字 //3.... 阅读全文

第十八章 堆

2018-03-10 19:54 by szn好色仙人, 144 阅读, 0 推荐, 收藏, 编辑
摘要://1. (A):堆非常适合分配大量的小型数据。堆的优点是能让我们不必理会分配粒度和页面边界之类的事情,其缺点是速度较慢且无法进行精细控制 (B):在系统内部,堆就是一块预定的地址空间地址,刚开始,区域内大部分页面没有调拨物理存储器,随着不断从堆中分配内存,堆管理器会调拨越来越多的物理存储器。 释放堆中的内存块时,堆管理器会撤销已调拨的物理存储器 (C):进程初始化的时候,系统会在进程地址空间创... 阅读全文

第十七章 内存映射文件

2018-03-08 22:20 by szn好色仙人, 351 阅读, 0 推荐, 收藏, 编辑
摘要://1. (A):与虚拟内存相似,内存映射文件允许开发人员预订一块地址空间区域并给区域调拨物理存储器。不同之处在于,内存映射文件的物理存储器来自磁盘上已有的文件,而不是来自系统的页交换文件。 一旦把文件映射到地址空间,我们就可对它进行访问,就像整个文件都已被载入内存一样 (B):内存映射文件主要用于以下三种情况: (1):系统使用内存映射文件来载入并运行.exe和DLL文件。节省了页交换文件的... 阅读全文

第十六章 线程栈

2018-03-06 22:14 by szn好色仙人, 277 阅读, 0 推荐, 收藏, 编辑
摘要://1. (A):有时候系统会在用户模式分区中预定区域,比如系统分配进程环境块和分配线程环境块,另一种可能是分配线程栈 (B):系统创建线程时,会为线程栈预定一块地址空间(每个线程都有自己的栈),并给地址空间调拨一些物理存储器 (C):默认情况下,系统会预定1MB的地址空间并调拨两个页面的物理存储器 (D):vs2010:项目->属性->链接器->系统->堆栈保留大小 可以设置线程栈的大小,单位... 阅读全文

第十五章 在应用程序中使用虚拟内存

2018-03-05 22:19 by szn好色仙人, 316 阅读, 0 推荐, 收藏, 编辑
摘要://1.Windows提供了三种机制对内存进行操控: (A):虚拟内存:最适合用来管理大型对象或大型结构数组 (B):内存映射文件:最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多个进程间共享数据 (C):堆:最适合用来管理大量的小型对象 //2. (A): LPVOID WINAPI VirtualAlloc ( __in_opt LPVOID lpAddress, /... 阅读全文

第十四章 探索虚拟内存

2018-03-04 20:29 by szn好色仙人, 259 阅读, 0 推荐, 收藏, 编辑
摘要://1. (A):操作系统中有许多值是由系统所运行的主机决定的,如页面大小、分配粒度等,我们不应该硬编码这些值,而是应该调用 GetSystemInfo 来获取这些值 typedef struct _SYSTEM_INFO { union { DWORD dwOemId; // Obsolete field...do not use struct { WORD ... 阅读全文

第十三章 Windows内存体系结构

2018-03-03 20:52 by szn好色仙人, 282 阅读, 0 推荐, 收藏, 编辑
摘要://1. 每个进程都有自己的虚拟空间,对于32位程序来说,这个地址空间大小是4GB,范围由0X00000000-0XFFFFFFFF,对于64位程序来说,这个地址空间大小是16EB 在Windows中,正在运行的线程看不到属于操作系统本身的内存,这就意味着他不能无意访问到操作系统的数据 虽然应用程序有这么大的地址空间,但是这只是虚拟地址空间,为了能正常读写数据,还需要把物理存储器分配或映射到相应... 阅读全文

第十一章 Windows线程池

2018-02-28 21:29 by szn好色仙人, 327 阅读, 0 推荐, 收藏, 编辑
摘要://1.Windows内置的线程池函数允许我们做如下事情: (A):以异步方式调用一个函数 (B):每隔一段时间调用一个函数 (C):当内核对象触发的时候调用一个函数 (D):当异步I/O请求完成时调用一个函数 当进程初始化的时候,他并没有任何与线程池有关的开销,但是一旦调用了新的线程池函数,系统就会为进程创建相应的内核资源,其中一些资源在进程终止之前都将一直存在 务必注意线程池间的线程之间以及... 阅读全文