3 imJaron

尚未进行身份认证

暂无相关描述

等级
TA的排名 1w+

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

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

2018-05-24 15:42:30

条件变量(Condition Variable)详解

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

2018-05-03 16:53:10

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

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

2018-05-01 17:28:42

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

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

2018-05-01 17:15:11

VirtualAlloc函数使用总结

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

2018-05-01 17:13:40

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

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

2018-05-01 17:10:50

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

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

2018-04-30 08:18:26

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

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

2018-04-30 08:10:02

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

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

2018-04-30 07:54:57

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

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

2018-04-30 07:41:01

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

sendto()简述:  向一指定目的地发送数据。  #include<winsock.h>  intPASCALFARsendto(SOCKETs,constcharFAR*buf,intlen,intflags,  conststructsockaddrFAR*to,inttolen);  s:一个标识套接口的描述字。  buf:包含待发送数...

2018-04-28 15:56:09

Socket详解

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

2018-04-28 13:47:11

MAKEWORD(2,2)解释

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

2018-04-28 13:29:14

什么是Winsock WSAData ?

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

2018-04-28 10:56:57

函数返回值与RVO优化

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

2018-04-27 13:05:48

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

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

2018-04-27 12:17:39

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

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

2018-04-27 10:48:04

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

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

2018-04-26 14:02:47

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

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

2018-04-25 17:19:15

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

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

2018-04-25 15:54:14

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!