随笔分类 -  Windows

摘要:线程有两部分组成(1) 线程内核对象操作系统利用线程内核对象来管理线程。内核对象维护着线程的统计信息。(2) 线程栈线程栈维护着该线程内所有的函数参数和局部变量。进程和线程的区别之处在于:进程从来不执行任何的东西,他只是为线程的执行提供一个容器。也就是说,所有的线程都必须在某个进程内运行,我们也称此为设备的上下文。这意味:假如一个进程上下文中有两个或两个以上的线程在运行,这些线程将共享同一个地址空间。这些线程可以执行同样的代码,处理相同的数据。另外,这些线程共享 内核对象句柄,因为句柄表是针对每个进程的,而不是线程。 相较于线程,进程所使用的系统资源比较多,其原因在于地址空间。为每一个进程创建 阅读全文
posted @ 2013-05-08 10:24 CBDoctor 阅读(259) 评论(0) 推荐(0) 编辑
摘要:首先明白几个概念:虚拟内存是从硬盘置换出来的,堆本身就是内存,程序运行时,可用内存=物理内存+虚拟内存。虚拟内存一般用文件来保存数据,虚拟内存的 出现主要是因为以前内存不够(16M的内存刚出来的时候可是天价啊),磁盘相对便宜一些,所以聪明的系统设计者就把设计了虚拟内存,在程序运行的时候把那 些很久没有被访问过的(可能以后也不会用到)内存映射到文件里面去(以后需要的时候再读进内存),把内存腾出来给真正需要执行的代码和数据,这样看起来可 用内存就比物理内存多了。 HeapAlloc()是堆分配内存函数,查看c,c++的malloc,new函数的代码,可以看到就是对HeapAlloc()函数的封装, 阅读全文
posted @ 2013-03-14 10:12 CBDoctor 阅读(330) 评论(0) 推荐(0) 编辑
摘要:在Windows中,系统为大家提供了很多种内存的分配方式,包括new,malloc(),HeapAlloc(),VirtualAlloc()等,那么它们的区别是什么呢?彼此有没有联系呢?下面对此来做个比较和总结。(1)new是C++的运算符,操作的是默认堆,具备编译器可控制的操作,可以完成C++类对象的构造,适合小型数据的内存分配,操作简单方便。(2)malloc是c提供的库函数,操作的是默认堆,适合小型数据的内存分配,操作简单方便。(3)HeapAlloc操作的是默认的堆或自定义堆,效率高,适合小型数据或中型数据内存分配(4)VirtualAlloc()操作的是虚拟内存,适合大型数据的内存分 阅读全文
posted @ 2013-03-13 10:03 CBDoctor 阅读(314) 评论(0) 推荐(0) 编辑
摘要:在进行Windows的学习过程中,经常看到不同的内存分配方式,例如VirtualAlloc, HeapAlloc, malloc和new。它们之间存在一些差异。(1)VirtualAllocPVOID VirtualAlloc(PVOID pvAddress, SIZE_T dwSize, DWORD fdwAllocationType, DWORD fdwProtect)VirtualAlloc是Windows提供的API,通常用来分配大块的内存。例如如果想在进程A和进程B之间通过共享内存的方式实现通信,可以使用该函数(这也是较常用的情况)。不要用该函数实现通常情况的内存分配。该函数的一个重 阅读全文
posted @ 2013-02-20 13:15 CBDoctor 阅读(3783) 评论(0) 推荐(0) 编辑
摘要:添加引用#include <iostream>using namespace std;AllocConsole();freopen("CONIN$", "r", stdin );freopen("CONOUT$", "w", stdout);freopen("CONERR$", "w", stderr);cout << "启动控制台/n/n";在析构函数中调用FreeConsole();intmain(intargc,char*ar 阅读全文
posted @ 2013-01-26 17:04 CBDoctor 阅读(262) 评论(0) 推荐(0) 编辑