自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

imJaron的博客

锲而舍之, 朽木不折; 锲而不舍, 金石可镂

  • 博客(541)
  • 收藏
  • 关注

转载 低优先级任务在执行过程中高优先级任务在干什么

在操作系统中,低优先级任务想要得到CPU的使用权,是建立在高优先级任务遇到阻塞语句的前提下,比如等待事件标志、等待消息、等待信号量、遇见延迟函数等        而在低优先级任务执行过程中,高优先级任务在干什么,或者说CPU在干什么        在抢占式操作系统中,高优先级任务是不会等待低优先级任务彻底执行完毕后,通过调度器切换任务而获得CPU使用权,而是高优先级任务的就绪条件一满足就会立刻夺过...

2018-05-24 15:42:30 3663 1

转载 条件变量(Condition Variable)详解

http://www.wuzesheng.com/?p=1668条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在 bool变量test_cond为true时才能继续执行,而test_cond的值是由t2来改变的,这种情况下,如何来写程序呢?可供选择的方案有两 种:第一种是t1定...

2018-05-03 16:53:10 1360

转载 C++的 RTTI 观念和用途(非常详细)

自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception handling)需要RTTI;最近新推出的C++ 或多或少已提供RTTI。 然而,若不小心使用RTTI,可能会导致软件弹性的降低。本文将介绍RTTI的观念和近况﹐并说明如何善用它。 什么是RTTI﹖      在C++ 环境中﹐头文件(header file...

2018-05-01 17:28:42 642

转载 内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc

很多地方都会使用内存,内存使用过程中操作不当就容易崩溃,无法运行程序,上网Google学习一下,了解整理下他们之间的区别以及使用 ,获益匪浅0x01 各自的定义和理解   (1)先看GlobalAlloc()    GlobalAlloc()主要用于Win32应用程序实现从全局堆中分配出内存供2017-03-05程序使用,是16位WINDOWS程序使用的API,对应于系统的全局栈,返回一个内存句柄...

2018-05-01 17:15:11 603

转载 VirtualAlloc函数使用总结

如果我们的程序需要动态内存的话,则迟早会调用Win32函数VirtualAlloc。但是程序也可以不调用VirtualAlloc,而是直接调用Windows堆函数或者CRT堆函数。不过,知道VirtualAlloc如何工作,可以帮助我们更好地理解这些调用函数。    首先,必须知道保留(Reserved)内存和占用(Committed)内存的含义。当内存放保留时,一段连续虚拟地址空间被留出。例如,...

2018-05-01 17:13:40 2642

转载 关于物理内存,虚拟内存等概念

一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是...

2018-05-01 17:10:50 276

转载 C++前向声明(解决类的互相包含问题)

类的互相包含假设有两个类#include "B.h"class A {private: B *b;};#include "A.h"class B {private: A *a;};编译时编译器会提示类A或类B未定义 这是由于两个类互相引用对方造成类似先有鸡还是先有蛋的问题 编译器无法正常的按顺序编译代码1234567891011121314151617前...

2018-04-30 08:18:26 846

转载 C/C++程序员是这样理解内存的

C/C++作为偏底层的语言,我们往往可以使用其对内存进行直接操作,相对来说比较灵活,但任何事情都有两面性,对内存的操作简便也经常导致程序出现内存bug。所以我们在编程时要特别重视内存和指针等概念,尽量避免bug,而这均取决于我们对内存的理解。       本文就从C/C++的内存基础知识讲起,让我们对内存有一个更深入的理解。  一、对内的分配  32位操作系统支持4GB内存的连续访问,但通常把内存...

2018-04-30 08:10:02 248

转载 C++ 内存分配(new,operator new)详解

本文主要讲述C++ new运算符和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池,STL中的应用。一 new 运算符和 operator new():new:指我们在C++里通常用到的运算符,比如A* a = new A;  对于new来说,有new和::new之分,前者位于stdoperator new()...

2018-04-30 07:54:57 531

转载 C++内存管理(超长,例子很详细,排版很好)

[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还...

2018-04-30 07:41:01 441

转载 UDP协议的两个主要方法sendto和recvfrom详解

sendto()简述:  向一指定目的地发送数据。  #include <winsock.h>  int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,  const struct sockaddr FAR* to, int tolen);  s:一个标识套接口的描述字。  buf:包含待发送数...

2018-04-28 15:56:09 1494

转载 Socket详解

“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket...

2018-04-28 13:47:11 330 1

转载 MAKEWORD(2,2)解释

宏的原始定义:#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8)) 返回值:一个无符号16位整形数。例子:WORD wVersionRequested;wVersionRequested = ...

2018-04-28 13:29:14 950

转载 什么是Winsock WSAData ?

什么是Winsock    Winsock是Windows下的网络编程接口,它是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口。构建编程环境    Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOC...

2018-04-28 10:56:57 840

转载 函数返回值与RVO优化

RVO优化:return value optimistic,指当一个函数返回一个值类型而非引用类型时,可以绕过拷贝/移动构造函数,直接在调用函数的地方构造返回值。要发生rvo需要有三个条件:1,如果类型是自定义类型,那么此时的拷贝/移动构造函数是可访问的2,返回类型必须与实际类型完全一致,即返回时不需要进行隐式类型转换,否则不能进行rvo,因为不知道用户定义的类会不会有特别的类型转换构造函数3,返...

2018-04-27 13:05:48 436 1

转载 C++11中的继承构造函数

一、问题描写叙述  在继承体系中,假设派生类想要使用基类的构造函数,须要在构造函数中显式声明。例如以下:struct A{ A(int i){}};struct B:A{ B(int i):A(i){}};在这里,B派生于A,B又在构造函数中调用A的构造函数。从而完毕构造函数的传递。又比方例如以下。当B中存在成员变量时:struct A{ A(int i){}};...

2018-04-27 12:17:39 299

转载 30分钟了解C++11新特性

什么是C++11C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外)。C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、decltype,和模板的大量改进。本文将对C++11的以上新特性进...

2018-04-27 10:48:04 245

转载 右值引用,转移语义与完美转发

1. 左值与右值:    C++对于左值和右值没有标准定义,但是有一个被广泛认同的说法:可以取地址的,有名字的,非临时的就是左值;不能取地址的,没有名字的,临时的就是右值.    可见立即数,函数返回的值等都是右值;而非匿名对象(包括变量),函数返回的引用,const对象等都是左值.    从本质上理解,创建和销毁由编译器幕后控制的,程序员只能确保在本行代码有效的,就是右值(包括立即数);而用户创...

2018-04-26 14:02:47 648

转载 如何保证只能在堆(heap)上创建对象?

代码:view plainprint?class OnlyHeapClass  {  public:      OnlyHeapClass()      {      }        void Destroy()      {          delete this; // 等效于"OnlyHeapClass::~OnlyHeapClass();", 写                    ...

2018-04-25 17:19:15 339

转载 c++11智能指针解析——揭开底层面纱,完整理解智能指针

 简断截说:c++的入门坑点大家都是有目共睹的,无非就是指针的理解不深导致一些野指针,内存泄露等问题,所以就不赘述。智能指针正好能够弥补这些问题,因为它本质是存放在栈的模板对象,只是在栈内部包了一层指针。而栈在其生命周期结束时,其中的指针指向的堆内存也自然被释放了。因而实现了智能管理的效果,不需要考虑内存问题了,其实有点类似某种单例写法,程序运行结束,也不用考虑单例对象内存问题。     本次讨论...

2018-04-25 15:54:14 317 2

转载 野指针和悬空指针

野指针:野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。(1)成因野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。a.指针变量未初始化:任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建...

2018-04-25 14:53:10 225

转载 STL基本容器使用

1:关联容器和顺序容器  c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的k...

2018-04-25 13:31:37 162

转载 STL中容器的使用全面总结

一、容器的定义       在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法。二、容器的种类  1、顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。...

2018-04-25 13:29:56 213

转载 深入解析C++ STL中的常用容器

这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。S...

2018-04-25 12:48:36 261

转载 C++11之future,promise,packaged_task,async详解

C++11为了给我们提供更便利的并发编程,加入了 future,promise,packaged_task,async 这几个新特性,那么它们到底有什么作用又能给我们带来哪些便利呢?经典的生产-消费模型mutex + condition_variable:首先让我们来看一个最经典的生产-消费模型:[cpp] view plain copy#include <thread>  #incl...

2018-04-24 10:56:08 466

转载 浅析 C++ 之 RAII

1.什么是RAII 技术?(参见百度百科相关条目)      RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。   RAII 的一般做法是这样的:在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上...

2018-04-24 10:29:36 388

转载 C++11std::unique_lock与std::lock_guard的区别及多线程应用实例

C++11std::unique_lock与std::lock_guard的区别及多线程应用实例C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为。通常的做法是在修改共享数据成员的时候进行加锁--mutex。在使用锁的时候通常是在对共享数据进行修改之前进行lock操作,在写完之后再进行unlock操作,进场会出现由于疏忽导致由...

2018-04-24 10:26:33 278

转载 基于C++11/14/17的线程池实现

线程池,顾名思义就是预先启动一些线程,集中管理,需要的时候直接拿来用,无需用时再创建。尤其是在Windows平台,线程是稀缺资源,线程的创建和销毁都是十分耗时的,所以利用线程池来提升并发场景下的性能,是十分有必要的。C++11首次对并发进行了支持,这使得我们利用STL编写多线程应用程序成为了可能,不过STL的thread比较简陋,并没有提供更多的强大特性,只是一个最基础的多线程解决方案,定位应该是...

2018-04-24 10:25:09 459

转载 C++11多线程基本使用

C++11增加了线程及线程相关的累,很方便的支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高.线程的创建用std::thread 创建线程非常的简单,只需要提供线程函数或者函数对象即可,并可以同时指定线程的参数:#include<iostream>#include<thread>#include<chrono>using namespace ...

2018-04-24 10:16:05 160

转载 深入理解CRITICAL_SECTION

摘要临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。本文深入研究临界区的原理,以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序,可以显示所有临界区及其当前状态。在我们许多年的编程实践中,对于 Win32 临界区没有受到非常多...

2018-04-24 10:01:33 1144

转载 Visual Studio原生开发的20条调试技巧(下)

【感谢@_La_Isla_Bonita 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】我的上篇文章《Vistual Studio原生开发的10个调试技巧》引发了很多人的兴趣,所以我决定跟大家分享更多的调试技巧。接下来你又能看到一些对于原生应用程序的很有帮助的调试技巧(接着上一篇文章来编号)。这些技巧需要应用在Vistual Studio 2005 或者更新的版本中(当然也...

2018-04-23 17:55:45 160

转载 Visual Studio原生开发的20个调试技巧

【感谢@_La_Isla_Bonita 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】最近碰巧读了Ivan Shcherbakov写的一篇文章,《11个强大的Visual Studio调试小技巧》。这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧。我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试...

2018-04-23 17:54:00 223

转载 CloseHandle(),TerminateThread(),ExitThread()的区别

线程的handle用处:线程的handle是指向“线程的内核对象”的,而不是指向线程本身.每个内核对象只是内核分配的一个内存块,并且只能由内核访问。该内存块是一种数据结构,它的成员负责维护对象的各种信息(eg: 安全性描述,引用计数等)。CloseHandle()在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1...

2018-04-23 16:36:56 293

转载 C/C++四种退出线程的方法

退出线程可以有四种方法:1.线程函数的return返回(最好这样):  其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).2.调用 _endthreadex(...

2018-04-23 16:30:22 14314

转载 使用互斥量进行线程同步,与关键段和事件的区别

1 #include <iostream> 2 #include <process.h> 3 #include <windows.h> 4 #include <string> 5 using std::cout; 6 using std::endl; 7 using std::string; 8 9 const int num=2;...

2018-04-23 14:03:52 239

转载 临界区,互斥量,信号量,事件的区别

四种进程或线程同步互斥的控制方法临界区: 通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。互斥量: 为协调共同对一个共享资源的单独访问而设计的。信号量: 为控制一个具有有限数量用户资源而设计。事 件: 用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享...

2018-04-23 13:42:59 176

转载 C++多线程实例之互斥量同步

要点:将互斥量 + 条件变量/事件对象封装为了一个类CMutexLock,该类同时支持windows和linux下的互斥量同步。对熟悉windows和linux下面的多线程开发很有帮助。下面的代码可以直接在VS2008,2010中编译通过,linux下也是没问题的。如果你觉得写得不错也可以直接移植到你的代码库中,比较适合多线程中采用生产者-消费者这样的场景,比如子线程读取和解析文件生产给其它线程用...

2018-04-23 09:55:40 526

转载 多线程(C++)临界区Critical Sections

Critical Sections(功能与Mutex相同,保证某一时刻只有一个线程能够访问共享资源,但是不是内核对象,所以访问速度比Mutex快,但是没有等待超时的功能,所以有可能导致死锁,使用要小心)     当多个线程访问一个独占性共享资源时,可以使用“临界区”对象。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,...

2018-04-23 09:50:48 431

转载 C++多线程——三种线程实现方式的区别与实际应用建议

三种创建线程的方法分别在上述文章中已介绍,分别为:CreateThread,AfxBeginThread,_beginthread/beginthreadex区别:        CreateThread是Windows API函数,提供操作系统级别操作,不用于MFC及RTL函数中。一般不建议调用此函数。线程函数定义指定如下形式[cpp] view plain copyDWORD WINAPI T...

2018-04-23 09:47:34 558

转载 利用WinDbg找出程序崩溃的代码行号

之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.hMiniDump.cpp<具体请参考附件SRC中,太大就不贴了>1、在CXXDlg::OnIni...

2018-04-19 14:43:14 1406

空空如也

空空如也

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

TA关注的人

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