
C++
九嶷山
认真做事 用心做人
展开
-
C函数调用方式与原理
当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。这些细节跟操作系统平台及编译器的实现有关,下面的描述是针对运行在Intel奔腾芯片上Linux的gcc编译器而言。c语言的标准并没有描述实现的方式,所以,不同的编译器,处理器,操作系统都可能有自己的建立栈帧的方式。一个典型的栈帧 ...转载 2020-03-20 15:14:02 · 1943 阅读 · 0 评论 -
在VS中去掉ipch和sdf文件
使用VS2010建立C++解决方案时,会生成SolutionName.sdf和一个叫做ipch的文件夹,这两个文件再加上*.pch等文件使得工程变得非常的庞大。本文介绍两种方法使得在vs2010中不产生.sdf和ipch文件 方法一:Tools->Options->Text Editor->C/C++->Advanced->Disable Datab...原创 2019-03-03 08:28:38 · 608 阅读 · 0 评论 -
C++变长结构体
C99允许。结构体最后使用0或1的长度数组的原因,主要是为了方便的管理内存缓冲区,如果你直接使用指针而不使用数组,那么,你在分配内存缓冲区时,就必须分配结构体一次,然后再分配结构体内的指针一次,(而此时分配的内存已经与结构体的内存不连续了,所以要分别管理即申请和释放)而如果使用数组,那么只需要一次就可以全部分配出来,(见下面的例子),反过来,释放时也是一样,使用数组,一次释放,使用指针,得先释放结...原创 2019-03-03 08:33:06 · 1806 阅读 · 0 评论 -
自定义类实现定时器
1. 自定义类继承于CWnd,定义中加入消息映射class CXxxx : public CWnd{ //消息映射protected: //时间消息 afx_msg void OnTimer(UINT nIDEvent); DECLARE_MESSAGE_MAP()};BEGIN_MESSAGE_MAP(CAndroidUser, CWn...原创 2019-03-21 14:36:56 · 447 阅读 · 0 评论 -
斗地主AI
下载:https://download.youkuaiyun.com/download/larry_zeng1/11992337(旧版本:https://download.youkuaiyun.com/download/larry_zeng1/11049219)原创 2019-03-22 13:06:59 · 1837 阅读 · 0 评论 -
Cocos2d-x 3.2中的三种缓存类
Cocos2d-x 3.2中的三种缓存类【前言】Cocos引擎主要有三种缓存类:> 纹理缓存:TextureCache> 精灵帧缓存:SpriteFrameCache> 动画缓存:AnimationCache缓存的目的就是:先将所需资源(如纹理图片)加载到内存中,之后再次使用该资源的时候,就可以直接从内存中取出,而不需要重新加载。从而减少了CPU和GPU...转载 2019-03-29 11:10:48 · 412 阅读 · 0 评论 -
cocos2dx-lua lua-binding只绑定函数,不绑定类
lua调用c++方法时,如何不绑定c++类只绑定函数(调用c++的全局函数,而不是类的成员函数)。我这里把全局函数写在了AppDelegate.h中。----------1.添加全局函数AppDelegate.h中在类外添加代码:static int lua_cocos2dx_testFun(lua_State* L){ printf("这个是测试函数"); return 0;}...转载 2019-05-14 20:28:24 · 491 阅读 · 0 评论 -
Cocos2d-x3.0如何绑定调用lua回调函数
(假设你已经会使用tolua导出自定义类)首先,在C++先写一个类,里面包含这么一个函数void registerScriptFuncHandler(int handler){ return;}没错,这个函数什么都不用做。接着使用 genbinding.py 导出类你会得到一个不能用的导出函数int lua_MyClass_M...转载 2019-05-15 13:00:23 · 507 阅读 · 0 评论 -
IDA Pro: C++逆向之容器vector篇入门
IDA Pro下载:https://download.youkuaiyun.com/download/larry_zeng1/11122054前言:说实话,我自己也不会c++的逆向。然后,现在太多的题目是c++的逆向了,一上来就是一堆容器,搞得我不得不去补补c++逆向部分的知识了,我这篇文章以西湖论剑的easyCpp为例,希望能给那些跟我一样是c++逆向的新手的朋友们一点启发。下面我就开始我的抛...原创 2019-06-20 14:01:49 · 4934 阅读 · 0 评论 -
SCons 构建工具
先说明下什么是scons,scons是一个Python写的自动化构建工具,就比如老牌的cmake,或者如果经常跟google一些开源项目打交道的话,那肯定知道新近开始流行的gyp(google内部用的构建工具),scons实现跟它们有类似的功能。而scons又有区别于其他构建工具的特点,不得不承认,这些特点让我喜欢上了这个工具。先简单总结下吸引我的几点:1. 自动依赖分析2. 工具本身...原创 2019-09-19 08:26:48 · 1232 阅读 · 0 评论 -
boost.asio 学习笔记01
boost.asio为异步IO提供了一份标准的C++的跨平台实现,特别针对网络IO提供了良好的支持,使之成为C++网络编程利器。关于如何使用asio,boost文档中已经有了详尽说明,而且附带的例子也很直观,我们不必再造轮子;本文则结合asio的基本应用,侧重于源代码的分析,特别是针对windows平台上的实现进行分析。纵观asio源码,在统一的接口层之下,asio提供了大量的类来支持不同的平...转载 2019-02-06 17:09:10 · 321 阅读 · 0 评论 -
默认库“library”与其他库的使用冲突;使用 /NODEFAULTLIB:library
下表显示根据要使用的运行时库应忽略的库。若要使用此运行时库 请忽略这些库 单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 使用 DLL 的多线程 (msvc...原创 2019-01-28 17:01:18 · 10667 阅读 · 0 评论 -
服务器优化
本文只是提供一些游戏服务器优化思路,其中一些思路是用在不同场合的,不是同个架构的。需要根据应用场景选用合适方式。本文的引用的文章都是在自己写的在本博客内的,也都是上线开几百个服的成熟项目的。 一、框架设计优化1、分静态服务器和动态服务器。2、动态服务器使用两层负载均衡:多网关 和 多场景。网关的选择是登陆服务器根据网关的负载来选择。场景则作为分线和副本等分开。框架图参考:http://blog....转载 2018-05-23 16:46:51 · 282 阅读 · 0 评论 -
Visual Studio开源库集成器Vcpkg全教程
利用Vcpkg轻松集成开源第三方库1. 为什么要用Vcpkg 1.1. 传统使用开源库的方法 1.1.1. 编译工具1.1.2. 编译类型1.1.3. 工程目录设定1.2. Vcpkg的优点2. 获取Vcpkg 2.1. 下载Vcpkg2.2. 编译Vcpkg3. 使用Vcpkg 3.1. 查看Vcpkg支持的开源库列表3.2. 安装一个开源库3.3. 指定编译某种架...转载 2018-10-17 14:45:00 · 6281 阅读 · 0 评论 -
DB2Proto
记录一下定义person.proto文件,package tutorial;message Person { required int32 id = 1; optional string name = 2; optional string email = 3;}#include "ProtoImporter.h"using namespace google::pr...原创 2018-10-25 14:04:35 · 240 阅读 · 0 评论 -
计算结构体成员偏移量
问题写一个宏计算出结构体成员的偏移量。 假设有如下一个结构体,要计算成员c的在结构体中的偏移量。typedef struct Type_t{ char a; // 0 int b; // 4~7 double c; // 8~16};注意,上述的结构体必须考虑字节对齐的问题。 关于字节对齐的问题,可以参照5分钟搞定内存字节对齐,里面总结得非常到位。方...转载 2018-10-23 14:57:29 · 5172 阅读 · 0 评论 -
使用VS+VisualGDB编译调试Linux程序
下面我们来看一下创建demo的过程吧。配置虚拟机VisualGDB支持Linux的原理是,通过ssh连接到Linux系统上通过ssh给linux下达命令,具体原理不多说,看官网。既然需要Linux系统,而VS又是Windows系统,那么就需要一台虚拟机。使用VMware或者Visual Box都可以。首先要配置好网络,主机和虚拟机可以互相Ping通。然后清除防火墙即可...原创 2018-12-16 14:56:58 · 955 阅读 · 0 评论 -
金山卫士2.6.3
源码地址:https://github.com/5455945/PcManager/tree/bdev vs2005 sp2,windows sdk7.1 编译。01 源码来源01.01 金山源码位置2011年,曾经有一个金山开源计划。可以参见官网:http://code.ijinshan.com/。 目前很多内容都不可访问了。不过开源代码依然可以下载。 官网上提供了下载包和hg两种...转载 2019-01-12 13:44:10 · 733 阅读 · 0 评论 -
Visual Studio中检测内存泄漏的方法
方法一:#define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露 //以如下测试函数为例:int main(){ char* pChars = new char[10]; ...转载 2019-01-15 20:39:19 · 4520 阅读 · 0 评论 -
使用boost.asio写一个简单的通信程序(一)
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介绍如何写一个简单的通信程序来告诉读者如何使用asio,希望对asio的初学者有所帮助。由于只是介绍其基本用法,作为例子的简单示例并不考虑很多的业务逻辑和异常处理,只是介绍基本用法,让初学者入门。...原创 2019-02-02 17:41:20 · 1110 阅读 · 0 评论 -
使用boost.asio写一个简单的通信程序(二)
前面提到的保持io_service::run不退出的简单办法。因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了,如何让异步事件队列中一直有事件呢?一个简单的办法就是循环发起异步读操作,如果对方一直都不发数据过来,则这个异步读事件就会一直在异步事件队列中,这样io_service::run就不会退出了。但是这样有一个缺点就...原创 2019-02-02 17:43:31 · 347 阅读 · 0 评论 -
了解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-05-16 21:34:37 · 273 阅读 · 0 评论