
C/C++
北洋神
大学之前是个学霸,高考时还是全校第一。大二时迷上了网络游戏“传奇三”等网游,后来大学延期一年毕业,沦为学渣。2008年参加工作,热爱游戏,喜欢反向模拟游戏数值,喜欢钻研服务器架构,喜欢简单。
展开
-
宏中的变长参数
<br />#define MY_ASSERT_EX(expr, format, ...) /<br /> (void) ((expr) || /<br /> (1 != Sara_Assert(_T(__FILE__), _T(__FUNCTION__)##_T("()"), __LINE__, _T(#expr), format, __VA_ARGS__ )) || /<br /> (SARA_BREAK(), 0))<br /> <br /> <br /> <br />SARA是我们项目的名称,SAR原创 2010-07-31 11:21:00 · 487 阅读 · 0 评论 -
用C++11的std::async代替线程的创建
原文地址:http://www.cnblogs.com/qicosmos/p/3534211.htmlc++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);std::thread t(f, n + 1);t.join(); 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返转载 2017-07-25 18:39:05 · 350 阅读 · 0 评论 -
C++ 全局变量 静态全局变量 傻傻分不清
今天上午写C++代码,被神马全局变量和静态全局变量困住了,出现了各种“重定义”和“链接”相关的error。到底在哪里声明,在哪里定义,哪里使用extern?傻傻分不清~ 本来我想自己总结一下的,后来看到网上的总结太详细了,我就直接转载一下,以下文章转自网站“脚本之家”,看这篇文章还顺带复习编译原理呢~(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编转载 2017-08-01 17:11:54 · 303 阅读 · 0 评论 -
C++11 新的计时方法——std::chrono 大法好
计时有很多用途,比如:测试某一段代码的运行时间,时间越短,则性能相对越高。计时有很多方法,我将首先给出我以前常用的一种计时方法,然后给出我认为的最佳方法(采用了C++11的标准技术)。首先给出我以前常用的一种“传统”的计时方法:#include using namespace std;clock_t start = clock();// do something...cloc转载 2017-08-01 16:54:14 · 1619 阅读 · 0 评论 -
Life is short, use emplace_back()。探究一下C++11的push_back, move, rvalue, emplace_back
前言一直以来写代码,vector想都没想就是push_back,今天发现的C++11的emplace_back碾压了传统的push_back总结一句话:Life is short, use emplace_back()。简单叙述原因:emplace_back可以“同时构造和插入,一次搞定”,push_back需要“先构造,后插入,而且插入的时候还伴随着拷贝或者移动”。转载 2017-08-01 16:17:28 · 1098 阅读 · 0 评论 -
C++11 thread_local 关键词
前言在C++11多线程编程中,thread_local 这个关键词在一些特定场合挺有用的。什么是thread_local,关于thread_local。thread_specific_ptr代表了一个全局的变量,而在每个线程中都各自new一个线程本地的对象交给它进行管理,这样,各个线程就可以各自独立地访问这个全局变量的本地存储版本,线程之间就不会因为访问同一全局对象而引起资源竞转载 2017-08-01 15:34:37 · 746 阅读 · 0 评论 -
通过Actor模型解决C++ 并发编程的一种思维 — Theron 库简述
愈发紧迫的挑战现今,单台机器拥有多个独立的计算单元已经太常见了,这点在服务器的处理器上表现尤为明显,据 AMD 的一张 2012-2013 服务器路线图显示,服务器处理器的核心数将在 2013 年达到 20 颗之多。合理的利用 CPU 资源已是一个不得不考虑的问题。不少 C++ 程序员依然使用着多线程模型,但是对多线程的掌控并不是一件容易的事情,开发中容易出错、难以调试。有些开发者为了避免转载 2017-07-31 14:51:04 · 2059 阅读 · 0 评论 -
对寄存器ESP和EBP的一些理解
PS:EBP是当前函数的存取指针,即存储或者读取数时的指针基地址;ESP就是当前函数的栈顶指针。每一次发生函数的调用(主函数调用子函数)时,在被调用函数初始时,都会把当前函数(主函数)的EBP压栈,以便从子函数返回到主函数时可以获取EBP。下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码假设执行函数前堆栈指针ESP为0xAAAAAAA ;转载 2017-07-18 16:04:14 · 665 阅读 · 0 评论 -
STL算法交集、并集、差集
STL对集合操作有标准的算法,有没有用过呢?使用它们的时候有需要注意什么?例子程序?如果没接触过,请看这里的简单介绍:交集set_intersection、并集set_union、差集set_difference、对称差集set_symeetric_difference。针对这里提及的四个集合运算必须特别注意:1、第一个算法需保证第一集合和第二集合有序,并从小到大排序,内部使用默认“2、第二个算法需保证第一集合和第二集合有序,排序方式参照Compare确定,内部使用Compare比较元素大小。1 --转载 2011-02-11 17:23:00 · 2147 阅读 · 0 评论 -
一个支持线程安全的模板方式实现的内存分配器
<br /> 这是我将云风书中的内存分配器用模板方式实现的,锁是windows的,换成Linux的很容易。可以单独使用CSmallObject_Allocator作为内存分配器,也可以让你的类CA继承SSmall_Alloc,这样“new CA”就会调用该内存分配器来分配内存,很方便。<br /> <br />inline size_t _min(size_t a, size_t b)<br />{<br /> return a<b?a:b;<br />}<br />template< bool bT原创 2011-02-10 10:45:00 · 627 阅读 · 0 评论 -
基于前面内存分配器的STL内存分配器
<br /> 使用起来很简单,像这样:<br />typedef std::list< int, std::SR_allocator<int> > IntList;<br />typedef std::set< INT, std::less<INT>, std::SR_allocator<INT> > IntAttrRefreshArray;<br />typedef std::map< int, CItemBoxRef*, std::less<int>, std::SR_allocator< s原创 2011-02-10 10:50:00 · 653 阅读 · 0 评论 -
VC6.0、VS2005、VS2008安装STLport-5.2.1
<br />VC6.0、VS2005、VS2008安装STLport-5.2.1<br /> <br /> 今天为了装STLport,搞了很久,主要是新版本以致搞VC6.0时,有很多要注意的。<br /> <br />前文: 下载STLport源代码,解压到一个目录,例如:F:/Program Files/STLport-5.2.1。下面我都用 %STLport% 表示解压的完全路径。根据解压的不同,各位用自己的目录替换这里的 %STLport% 就是(有点罗嗦了)。<br /> <br /> <br转载 2010-12-06 11:02:00 · 711 阅读 · 0 评论 -
C语言 struct结构体的变量声明加冒号
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域转载 2017-11-20 17:47:58 · 1304 阅读 · 0 评论