随笔分类 -  学习杂记

摘要:__func__宏__func__返回当前的函数名,也可以返回class和struct名。 __VA_ARGS__宏可变参数宏 noexceptnoexcept操作会阻止异常扩散,被noexcept修饰的函数,如果throw()抛出异常,则直接调用std::terminate()结束程序,ca... 阅读全文
posted @ 2015-12-17 22:21 蒲蜡 阅读(580) 评论(0) 推荐(0)
摘要:前言 Linux产生信号中断,会打断当前正在执行程序,转而执行信号处理函数,由于执行信号处理函数时,正常执行程序被挂起,信号处理函数怎么操作才能保证程序再次被唤醒后能够正常执行,下面我们看两个案例 案例一 void signal_handler() { printf("this is ... 阅读全文
posted @ 2015-09-24 14:11 蒲蜡 阅读(3361) 评论(1) 推荐(2)
摘要:C++操作xml没有标准库的支持,TinyXml是个不错的xml操作库,以前总是使用TinyXml读写xml,但是最近对大量xml进行读写时,速度真的是有点慢,特别是在调试时,每次启动读xml就要好长时间,由于TinyXml在加载文件后,所有的节点都是重新分配内存,然后操作完clear后,所有内存都会被释放,因此性能的瓶颈都在加载文件的时候,后来在网上看到有人说tinyxml2,虽下载下来尝试了下,那速度真的是提高了好几倍.看了看tinyxml2它里面实现了一个简单的内存池,当我们进行加载文件和clear操作时,都是在内存池上进行操作,减少了向系统申请和释放内存的时间,速度瞬间提高了好多.看看 阅读全文
posted @ 2013-10-29 19:35 蒲蜡 阅读(2698) 评论(0) 推荐(0)
摘要:TCP协议是TCP/IP参考模型中属于传输层协议,TCP是保证可靠地,有序的.TCP提供了多种机制保证这种服务,这里介绍下TCP建立连接和关闭连接的过程.TCP建立连接三次握手:服 SYN, client_seq 客务 户(第二次握手)器 端[服务器发送SYN,ACK包后处于SYN_RCVD状态]服 ACK, server_seq+1 客务 户(第二次握手)器 端[服务器发送FIN, ACK包后处于CLOSE_WAIT状态, 客户端收到FIN, ACK包后处于FI... 阅读全文
posted @ 2013-10-18 13:49 蒲蜡 阅读(294) 评论(0) 推荐(0)
摘要:大端(Big-Endian)小端(Little-Endian)不同的CPU将数据存储在内存中顺序不同造成的,大端:数据高位存储在内存地址的低位, 数据的低位存储在内存地址的高位.我们假设内存从0x4000开始存放一个16位的数0x1234以下是大端和小端,大端情况:0x40000x40011234小端情况:0x40000x40013412可以通过下面函数判断大端和小端:bool Big_Endian(){ union Endian { long l ; char c[ sizeof(long )]; }e ; e.l = 1; return (e.c[ sizeof(long) - 1] == 阅读全文
posted @ 2013-10-17 13:53 蒲蜡 阅读(293) 评论(0) 推荐(0)
摘要:协程(coroutine)是一种程序组件,一个轻量级的线程.在单核CPU中系统会将CPU划分为时间片,调度不同线程进行运行,给用户造成所有程序在同时运行的错觉;在多核CPU中每个线程可能由不同的CPU来执行.但是协程单核CPU和多核CPU中都和单核CPU中线程一样.协程在状态机,角色模型,迭代器,产生器非常实用.在网上看了好多协程的介绍和例子,总结下.协程实现的语言不是很多,lua是其中之一1)lua中操作协程的函数:coroutine.create() --创建一个协程coroutine.yield() --挂起一个协程coroutine.resume() --唤醒一个协程lua中协程中通过 阅读全文
posted @ 2013-10-13 22:36 蒲蜡 阅读(3548) 评论(0) 推荐(1)
摘要:最近看书介绍rundll32可以加载dll文件并执行其中导出函数,在MSDN中我们可以看到绍http://support.microsoft.com/kb/164787/zh-cnrundll32调用的函数要有特定的格式如下图:hwnd - 窗口句柄,它应该用作 DLL 创建的任何窗口的所有者窗口hinst - DLL的实例句柄pszCmdLine - DLL应分析的字符串lnCmdShow - 描述DLL的窗口应如何显示我们可以看到有的脚本中直接用rundll32.exe直接调用dll执行一些命令,我们也可以自己写一个dll进行测试#include_declspec(dllexport)vo 阅读全文
posted @ 2013-08-29 22:39 蒲蜡 阅读(599) 评论(0) 推荐(0)
摘要:Lua设计小巧很容易与C/C++进行交互,下面我们具体讲解C/C++中如何调用lua,而lua中又如何调用C代码.首先lua和C交互的一个重要的数据结构lua_State,它是进行数据交换的堆栈,按照严格的LIFO规则(后进先出,始终存取栈顶),lua提供了一些函数来压栈例如:void (lua_pushnil) (lua_State*L);void (lua_pushnumber) (lua_State*L,lua_Numbern);void (lua_pushinteger) (lua_State*L,lua_Integern);void (lua_pushlstring) (lua_St 阅读全文
posted @ 2013-07-27 21:58 蒲蜡 阅读(1285) 评论(1) 推荐(0)
摘要:最近看公司同事在玩页游《斗破乾坤》我也进去完了一把,感觉画面还不错,就是不停的点鼠标做任务,一会就烦了,看了下前端配置文件,我们以error.json_3e30为例,这个肯定是记录错误码的文件直接打开是乱码,二进制打开看到:前面写着czlib_1.0,那肯定是zlib压缩,然后找了个zlib压缩后的数据对比了下,发现,压缩后的数据从78DA开始的,因此也就是从第13个字节开始,解压后发现文件依然不能直接看到,直接打开只能看到少许几个单词,因此可以断定没有加密,只是某种编码如下:我们可以看到,这里肯定不是ASCII码,因为有大量的不能显示的字符,后来想到AS3中的AMF编码,查了下AMF编码格式 阅读全文
posted @ 2013-07-27 16:01 蒲蜡 阅读(4986) 评论(0) 推荐(1)
摘要:C语言中可以使用goto进行程序跳转,但是goto只能使用在一个函数内部,不能实现在不同函数之间的跳转,C语言因此提供了setjmp和longjmp函数实现此功能,一般进行异常处理。从函数名称可以看到,一个是设置跳转点,另一个实现长距离的跳转。我们可以再一个函数内部调用setjmp函数设置一个跳转点,在另一个函数中调用longjmp进行跳转,我们需要定义一个jmp_buf类型变量保存跳转信息。eg:jmp_bufjb;voidmain(){if(setjmp(jb) == 0) {longjmp(jb, 1); }else {printf("jmp point 1"); } 阅读全文
posted @ 2013-07-24 20:19 蒲蜡 阅读(1062) 评论(0) 推荐(0)
摘要:Windows中提供了一个宏#define CONTAINING_RECORD (address, type, field ) ((type *)( \ (PCHAR)(address ) - \ (ULONG_PTR)(&((type *)0)->field))) address : 结构体内成员实际地址type : 结构体类型field : 结构体内成员字段名称作用: 更加提供的结构体成员地址反... 阅读全文
posted @ 2013-06-18 23:08 蒲蜡 阅读(457) 评论(0) 推荐(0)
摘要:C语言中提供了对时间进行操作的函数和数据结构,下面介绍几种常用的函数。首先是表示时间的time_t类型,在32位windows VS2010中定义为long long类型,占8个字节,表示自1970年1月1日0时0分0秒到现在的秒数。表示日期结构tm定义如下:structtm {inttm_sec;/* seconds after the minute - [0,59] */inttm_min;/* minutes after the hour - [0,59] */inttm_hour;/* hours since midnight - [0,23] */inttm_mday;/* day 阅读全文
posted @ 2013-06-04 21:56 蒲蜡 阅读(545) 评论(0) 推荐(0)
摘要:一.函数重载:函数名相同,返回值相同,只有参数不同(注意:float,double类型参数).二.模板函数:可以将参数和返回值设置为模板类型,编译时候确定具体类型.三.当模板函数和同名的非模板函数重载时,首先寻找与参数类型完全匹配的非模板函数,找到了,则调用它,如果没找到,则寻找函数模板,找到后具体化函数模板,而后调用该模板函数.四.用new分配的数组,必须delete []清除,确保数组中的对象能够正常的调用析构函数,清理资源.五.用new创建的类指针,如果被赋值指针并非类指针类型,则调用delete销毁时,一定要先转换回所分配的类指针类型,然后销毁该指针,否则不能正常完成析构. 例: vo 阅读全文
posted @ 2012-03-15 20:18 蒲蜡 阅读(228) 评论(0) 推荐(0)