摘要:
Segment类Segment成员变量 long long m_index;记录该segment的索引号。 int* volatile m_state;状态数组,标识所对应的元素节点的状态,默认值为0,如果该元素节点添加了值,则标记为1。 T* volatile m_array;队列元素存储空间的指针。 Segment* volatile m_next;指向下一个segment的指针。 volatile long m_high;标识在当前segment,元素最后添加的索引值,初始值为-1,如果该segment被填满了,则该值为SEGMENT_SIZE – 1。 volatile long m_ 阅读全文
摘要:
ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。ConcurrentQueue<T>数据结构下图是ConcurrentQueue<T>数据结构的示意图:ConcurrentQueue<T>队列由若干Segment动态构成,每个Segment是一块连续的内存Buffer,大小固定为SEGMENT_SIZE。ConcurrentQueue<T>私有成员变量ConcurrentQueue<T& 阅读全文
摘要:
最近,在编写自己呃数独游戏过程中,遇到需要生成一些随机但连续的数字序列的需求。当时,为了尽快实现功能,临时写了一个凑合着用。现在有时间,写一个通用的,生成随机但连续数的序列的函数,当然原理很简单。// generate a random number list length of which is size;// the range of numbers is 0 to size-1;bool CreateRandomSequenceNumbers(int size, int* randomSequence){ if ( size <= 0 || (randomSequence == N 阅读全文
摘要:
我有如下三行代码: int a = 8; int ret = a/2; ret = a >> 1;现在讨论上面两种实现除以2方式的性能,我们有如下伪汇编代码: int a = 8;013B143E mov dword ptr [a],8 \\ 将8赋值为变量a int ret = a/2;013B1445 mov eax,dword ptr [a] \\ 将a的值赋值给eax013B1448 cdq \\ 双字转换为4 字(把EAX 中的字的符号扩展到EDX 中去)013B1449 sub eax,edx ... 阅读全文
摘要:
.NET下的很多技术都是基于反射机制来实现的,反射让.NET平台下的语言变得得心应手。最简单的,比如枚举类型,我们我可以很容易的获得一个枚举变量的数值以及其名称字符串。可是,在C++中,枚举变量本质上和一个整形变量没有区别,我们很难获取一个枚举变量的名称字符串。其实在C++中,我们可以通过宏来实现类似反射的机制。接下来,我想总结一下如何在C++中实现一个类似于C#枚举类型的方法。 __VA_ARGS__使用__VA_ARGS__,我们可以定义带可变参数的宏,举个例子:#define MY_PRINTF(…) printf(__VA_ARGS__)这样我们写MY_PRINTF("hel 阅读全文
摘要:
查询计算机上安装了哪些版本的.NET Framework检查以下注册表项的子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP;使用.NET Framework提供的CLRVer.exe工具查询;32位Windows应用程序能在64位Windows上运行的原因Windows的64位版本提供了一个名为WoW64(Windows on Windows64)的技术,WoW64能模拟x86指令集。CTS,CLR,CLI,CLSCommon Type System,通用类型系统Common Language Runtime,公共 阅读全文
摘要:
对于如下简单的代码: static void ILDiscoveryListDelete() { List<int> list = new List<int> { 1,2,3,4, }; foreach (var item in list) { list.Remove(item); } }在执行的时候会跑出如下异常:为什么会这样子呢,我们知道,foreach语句在... 阅读全文
摘要:
时常搞不清楚这两者之间的区别,因此决定在这儿写下来。Object.Equals(object obj1, object obj2)方法表示所比较的两个对象的值是否相等。结果取决于obj1.Equals(obj2)方法的返回结果。Object.ReferenceEquals(object obj1, object obj2)方法表示所比较的两个参数是否引用的同一个对象。 阅读全文
摘要:
这个问题曾经在教科书上见到过,没想到自己居然遇到了。前几天到客户那去维护程序,出现了大致如下的一段CPP代码。 int resultValue =0; if (some condition) { /* other codes */ int resultValue = /* some value */ } else { /* other codes */ int resultValue = /* some value */ } /* use resultValue */当时代码一跑... 阅读全文
摘要:
最近在工作当做遇到一个问题,需要统计一段代码执行时间,但是手头上却没有一个好用的计算时间间隔的东西。于是,自己山寨了一把.NET下的StopWatch类,写了一个C++下的DNetStopWatch类。类图如下:代码逻辑几乎完全按照StopWatch类来实现的。以下是一段测试代码: DNetStopWatch sw; sw.Start(); Sleep(1000); sw.Stop(); sw.Start(); Sleep(3000); sw.Stop(); printf("Elapsed Ticks: %lld,\tElapsedMilliseconds: %lld",s 阅读全文