随笔分类 - C++
摘要:线程池解决多线程难于管理的问题,Windows主要提供如下方式实现异步调用函数:服务器客户端模式下比较适用定时回调函数:避免使用多个定时器占用主线程CPU处理时间内核对象通知状态回调:多个线程等待相同内核对象下适用异步IO请求完成时调用函数:异步IO操作情形下适用1)异步调用函数实现使用于服务器端创建线程处理客户端请求情景MainThread->Wait for Client request->CreateThread handle request-> waitfor client request使用:服务器端收到客户端请求时调用BOOL WINAPI QueueUserWo
阅读全文
摘要:2012年6月13日杭州某网络技术公司1,空指针自加int *p;int *pa=NULL;p=pa;p++;求p的值这道题考的貌似指针的加法,因为对于空指针比较敏感直接感觉有问题,所以填写出错.到底如何呢?直接反汇编之 int *p; int *pa=NULL;010D14F1 mov dword ptr [pa],0 ;指向0x000000000地址 p=pa;010D14F8 mov eax,dword ptr [pa] ;将pa赋予eax寄存器010D14FB mov dword ptr [p],eax ;将eax寄存器赋予p...
阅读全文
摘要:char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc";const char* str6 = "abc";cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?cout << boolalpha &
阅读全文
摘要:直接上代码float a = 1.0f;cout << (int)a << endl;cout << (int&)a << endl;cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?float b = 0.0f;cout << (int)b << endl;cout << (int&)b << endl;cout << boolalpha <<
阅读全文
摘要:也是最近被问的一个问题,全局变量在哪个阶段初始化?这个问题到没被问倒,全局变量在mainCRTStartup之后main调用之前,在该阶段应用会完成堆内存的申请(记得哪里还看到如果改了EntryPoint需要自己进行堆内存的申请和管理).而全局变量也正是在该阶段完成的初始化.然后又被问,那么全局变量在哪里被释放?回答是在应用退出之后main函数退出之后,这个回答也没问题.基本上算是正确的.但是回头自己仔细想想,那么全局变量又是怎么样被初始化的呢?还真的有点不太清楚,所以出于好奇,今晚开始细细研究研究!首先写了一段代码如下://头文件class ClassSizeRes{public: Clas
阅读全文
摘要:许久没有回头研究c++的一些概念了,突然被一道题考住了大体上如下class a{}//...a aobj;size_t aobjSize = sizeof(aobj);//问aobjSize等于多少?个人以为aobjSize=4;毕竟需要有地址空间来储存,而已一般来说每一个对象都有一个this指针所以虽然没有任何成员变量但是仍然应该为4事实并非如此,写了一下代码发现为1而且反汇编之后代码如下...00031758 mov dword ptr [ebp-4],0 size_t dwSize = sizeof(clsObj);0003175F mov dword ptr [eb...
阅读全文
摘要:研究com对于包容和聚合的概念总是显得有些模糊特意找了这篇文章转载一下COM的"可重用性";特性包括两种模型:包容和聚合 包容和聚合是COM的两种重用模型,它们的思路基本一致,只是在实现方法上有所不同,下面简要总结一下实现方法1.包容:假定我们已经实现了一个COM对象,不妨称它为对象A,它实现了接口ISomeIntf,不久之后,考虑到新的需要,我们要实现一个新的COM对象,称它为B,它既要实现接口ISomeIntf,也要实现接口IOtherIntf,而且,ISomeIntf接口所提供的服务与对象A所提供的服务基本一致,于是,我们考虑在实现对象B的过程中重用对象A的功能,只需
阅读全文
摘要:最近为了彻底弄清楚C++的对象模型,编译器又是如何实现多态的,虚表到底是怎样的,所以在这里自己写了点代码来实现和推敲C++的对象模型.首先定义如下继承体系:源代码然后构造对象指针,代码如下:int _tmain(int argc, _TCHAR* argv[]){IVtbl* pVtbl=NULL;//vt to real1int iSize = sizeof(VtblReal1);pVtbl = new VtblReal1();void (__thiscall VtblReal1::* pfn)(void)=&VtblReal1::f2;//成员函数指针声明赋值//void* pTe
阅读全文
浙公网安备 33010602011771号