- 博客(26)
- 资源 (9)
- 收藏
- 关注
原创 十五、在应用程序中使用虚拟内存
windows提供一下三种机制来对内存进行操控:虚拟内存:最适合用来管理大型对象数组或大型结构数组内存映射文件: 最适合用来管理大型数据流,以及在同一机器上多个进程共享数据(17章)堆:最适合用来管理大量的小型对象windows提供了一些用来操控虚拟内存的函数,我们可以通过这些函数直接预定地址空间区域,给区域调拨(来自页交换文件的 )物理存储器。以及根据自己的需要来设置页面的保护属
2013-05-30 16:41:59 1027
原创 十四、探索虚拟内存
GetSystemInfoGlobalMemoryStatus 虚拟内存状态非统一内存访问(numa),机器中的cpu既能访问自己节点的内存,也能反问其它结点的内存。工作集; 我们把一个进程的地址空间中被保存在内存里的那些页面称为工作集。 getprocessMemeroinfovirtualQuery太粗略,未完待续。。。
2013-05-30 16:06:07 783
原创 十三、windows内存体系结构
1. 内核模式分区。 这一分区是操作系统代码的驻地。与线程调度,内存管理,文件系统支持,网络支持以及设备驱动程序相关的代码都载入该分区。驻留在这一分区的任何东西都为所有进程所用。受保护。如果一个应用程序试图读取或写入位于这一分区中的内存地址,会引发访问违规。2. 当系统创建一个内存并赋予它地址空间时,可用地址空间中的大部分都是闲置的或者尚未分配的。为了使用这部分地址空间,我们必须调用virtu
2013-05-30 16:02:45 1562
原创 在mfc程序中,打开控制台窗口的方法
在OnInitDialog函数返回之前加入,就可以观察控制台输出。AllocConsole();freopen("CONOUT$", "a+", stdout);
2013-05-30 15:36:37 7120
原创 十、同步设备I/O与异步设备I/O(I/O完成端口)
I/O完成端口是一种有无数用途的绝佳的线程间通信机制1. 打开和关闭设备 设备:能够与之进行通信的任何东西 createFile可以打开很多设备 缓存,标志2. 使用文件设备设置文件指针位置以及如何改变文件大小每个文件内核对象都有自己的文件指针如何追加内容到文件结尾,如何写入。3. 执行同步设备I/OreadFile writeFile
2013-05-30 15:25:50 1132
原创 九、用内核对象进行同步
信号,互斥量,事件,可等待计时器1. 关键段只能对同一进程的线程进行同步,且无法设置最长等待时间,所以容易死锁。 使用内核对象的唯一缺点是它们的性能。调用本章的函数,线程都需要从用户模式切换到内核模式。 内核对象状态:触发signaled,未触发 nosignaled 为了理解,可以把内核对象当作旗帜,触发,旗帜升起,未触发,旗帜降下。当线程等待的对象处于未
2013-05-30 13:52:59 854
原创 八、 用户模式下的线程同步
1. 在一下两种基本情况下,线程之间需要相互通信: (1). 需要让多个线程同时访问一个共享资源,同时不能破环资源的完整性 (2) . 一个线程需要通知其他线程某些任务已完成。2. 原子访问。 Interlocked 系列函数 Iterlocked在x86的实现方式: Interlocked会在总线上维持一个硬件信号,这个信号会阻止其他cpu访问同一内存地址
2013-05-30 11:28:13 960
原创 七、线程调度优先级和关联性
1. 线程切换 --> 上下文切换2. 抢占式调度,很多线程无法调度。因为他们都在等待某种事情发生 p1663. 挂起和恢复 suspendThread 挂起 ResumeThread 恢复 对挂起进行计数,例如一个线程被挂起三次,则需要回复三次才能被调度。 在实际开发中,使用suspendThread要小心,若挂起一个正在堆中分配内存的线程,会导致其它线程不能
2013-05-30 11:05:28 1025
原创 六、 线程
1. 线程 = 线程内核对象 + 线程栈 线程栈用于维护线程执行时所需的所有函数参数和局部变量2. 线程共享同一地址空间,线程共享内核对象句柄,因为句柄表是针对每一个进程的而不是针对线程的。3. 进程所使用的系统资源更多。其原因在于地址空间。(为一个进程创建一个虚拟的地址空间需要大量的系统资源,系统中会发生大量的记录活动,而这需要大量的内存)4. 所有窗口应该由同一个线程创
2013-05-30 10:49:15 815
原创 五、 作业
1. 想结束一个进程及其子进程在windows下很难,因为windows没有维护进程间的父子关系2. windows 提供一个作业内核对象,它允许我们将进程组合在一起并创建一个“沙箱”, 来限制进程能做什么3. 只有在作业中的所有进程都已终止运行之后,才会自动销毁4. 作业的cpu时间使用完,会杀死作业的所有进程待细化。。
2013-05-30 10:32:47 799
原创 四、进程
1. 进程 = 一个内核对象 + 一个地址空间2. 进程的实际执行者是线程 cpu调度的也是线程。 进程是最有惰性的,进程从来不执行任何东西,它只是一个线程的容器。3. hInstanceExe的实际值是一个内存基地址, 系统将可执行文件的映像加载到进程地址空间的这个位置。vs的基地址通常是0x00400000。 GetModuleHandle返回可执行文件或者dll文件映像加载到
2013-05-30 10:29:31 797
原创 windows via c/c++ 三. 内核对象
1. 内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问,这个内存块是一个数据结构,其成员维护着与对象相关的信息。2. 调用一个创建内核对象的函数后,函数会返回一个句柄,它标识所创建的对象。这些句柄是进程相关的,无法直接在另一个进程通过句柄值调用。3. 内核对象在创建时,通常要指定其安全性,可以据此判定内核对象4. 进程终止时,系统能保证一切都被正确清除。5.
2013-05-30 10:12:43 1421
转载 全面介绍Windows内存管理机制及C++内存分配实例
转自:http://blog.csdn.net/yeming81/article/details/2046193本文基本上是windows via c/c++上的内容,笔记做得不错。。本文背景:在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目
2013-05-30 09:44:10 29985 2
转载 Windows内存管理
转自:http://www.2cto.com/os/201107/95812.html本文主要内容:1.基本概念:物理内存、虚拟内存;物理地址、虚拟地址、逻辑地址;页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理 一、基本概念1. 两个内存概念物理内存:人尽皆知,就是插在主板上的内存条。他是固定的,内存条的容量多大,物理内存
2013-05-28 19:04:58 2049 2
原创 oracle笔记
以下内容是看蔡明老师ppt的一点记录。主要分为三部分,sql, pl/sql, dba。 dba略看。一,二表示第1,2部分。(一),(二)表示里面的第几个ppt一. SQL(一) SQL基础-数据查询(1)1. 对一列设一个新的显示名可以加双引号,也可以不加2. 字符串是大小写敏感的3. 字符串和日期被封装在单引号内4. like 匹配 varchar2,
2013-05-20 15:33:28 792
转载 用GDB调试程序
转自:http://blog.csdn.net/haoel/article/details/2879 感谢原作者GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有
2013-05-13 19:17:47 936
原创 实验6线程及其同步—哲学家问题的线程
一、实验目的:学习线程的编程和同步。二、实验要求:1、程序语法 philosopher_th [ -t ]N是哲学家的个数(N >= 2)。time是哲学家进餐和沉思的持续时间值,缺省为2秒。2、哲学家的编号为0 ~ N-1,分别用N个线程独立模拟。3、程序的输出要简洁,例如,当编号为3的哲学家在进餐时,就打印:
2013-05-13 16:29:51 1413
原创 实验五:实现mysleep函数
一、实验目的学习和掌握sleep函数中alarm的调用。二、实验要求函数名字和原型: unsigned int mysleep(unsignedint);该函数的功能要求与UNIX的sleep函数一样。1、使用alarm函数实现定时。2、必须正确处理mysleep函数中的闹钟与调用者可能设置的闹钟之间的关系。例如,如何解决不同的信号
2013-05-13 16:28:29 2525
原创 实验4 编制模拟“五个哲学家”问题的程序
一、实验目的:学习和掌握并发进程同步的概念和方法。二、实验要求:1、程序语法 philosopher [ -t ] 是哲学家进餐和沉思的持续时间值,缺省值为2秒。2、五个哲学家的编号为0~4,分别用五个进程独立模拟。3、程序的输出要简洁,仅输出每个哲学家进餐和沉思的信息。例如,当编号为3的哲学家在进餐时,就打印:
2013-05-13 16:27:11 1361
转载 屏蔽控制台应用程序的窗口 #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种方法。 操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相 同。在VC下,连接器对控制台程序设置的入口函数
2013-05-13 16:14:30 1539
转载 epoll使用详解(精髓)
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且
2013-05-13 09:41:39 732
转载 【材料整理】VC 树形控件 例子及相关知识
转自:http://www.vckbase.com/index.php/wv/1352首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL(名字随便给一个)。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Child,Border属性为None,为它们建立两个类,分别命名为Cdialog11和Cdialo
2013-05-09 10:21:05 3731 2
转载 【自定义控件】让你的控件也具有拖拽(drag-and-drop)功能 详细版
转自: 现在有很多软件都支持拖拽功能,就是用鼠标拖着文件放到软件窗口中某个位置,软件就可以做出相应的反应。比如,Windows自带的播放软件Windows Media Player,你可以拖着一个媒体文件放到它的主窗口中,它就会开始播放这个文件。 怎么让自己的软件也有这个功能呢? 其实,并不是很难,只要让你需要有拖拽功能的控件响应WM_DROPFILES消息就行了。下面
2013-05-08 20:41:48 3972
转载 【good】用枚举定义有意义的数组下标
转自:http://blog.csdn.net/starlee/article/details/1774117 简单易懂在开发中,经常会用到一些数组,它里面存放一定数量(已知,不是太多)的特定元素。在使用数字表示的数组下标访问数组中元素的时候,根本不知道该元素是否是需要的那个元素,而且使代码可读性降低,甚至还会出现下标越界的危险。 比如,现在有如下的继承体系:class
2013-05-08 15:59:32 677
转载 【问题解决】在C#中使用C++编写的类 使用托管c++(managed c++)
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额。因此很多以前搞VC++开发的人都转向用更强大的VS.Net。在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类的问题。下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++类以提供给C#使用。 比如,现在有一个工程名为NativeCppDll的由C++编写的DLL,里面输出了一个CPerso
2013-05-08 15:47:52 1274
原创 杂碎小知识(持续更新)
1. %08lXprintf("%08lX \n", g_arList[i]); 表示按16进制输出,08l其中‘08’表示输出宽度为8,内容在右边,左边补0,‘l’表示长整形2. c++虚析构函数的作用这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。3.关于unicodechar ---> wchar_t" " ---->
2013-05-01 14:40:55 967
计算机视觉:一种现代方法(第二版)清晰文字版(英文版)
2013-03-14
线性规划与网络流题解
2012-09-26
OpenCV 2 Computer Vision Application Programming Cookbook 全
2012-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人