c/c++
文章平均质量分 86
WalkingInTheWind
这个作者很懒,什么都没留下…
展开
-
如何加快C++代码的编译速度
C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -转载 2013-05-21 21:40:12 · 4039 阅读 · 0 评论 -
动态内存分配(malloc/free)简单实现--隐式空闲链表
本文使用隐式空闲链表实现简单的动态内存分配。动态内存分配器维护一个大块区域,也就是堆,处理动态的内存分配请求。分配器将堆视为一组不同大小的块的集合来维护,每个块要么是已分配的,要么是空闲的。实现动态内存分配要考虑以下问题:(1)空闲块组织:我们如何记录空闲块?(2)放置:我们如何选择一个合适的空闲块来放置一个新分配的块?(3)分割:在我们将一个新分配的块放置到某个空闲块之后,我原创 2013-03-13 19:07:18 · 13500 阅读 · 8 评论 -
关于C语言中的复合赋值操作符
复合赋值操作符有 +=, -=, *=, /=,%=, >=, &=, ^=, |=。下面以+=为例a += expression (1)等价于:a = a + expression (2) 但是,这里是有区别的,(1)式中的a(如数组下标访问的元素)只求值一次,(2)式中的a求值两次,当然编译器也许会优化,可能会使得(2)式效果和(1)式一样,但是有例外的情原创 2011-12-01 22:14:59 · 6421 阅读 · 0 评论 -
Singleton 单件模式
使用单件模式的意图是保证一个类只有一个实例,并提供一个访问它的全局访问点。将单件定义为全局或静态对象,然后依赖于自动的初始化,并不能完全实现上述意图。虽然可以提供全局访问点,但这是不够的。原因如下:1)我们不能保证静态对象只有一个实例会被声明。2)我们可能没有足够信息在静态初始化时实例化每个单件,单件可能需要在程序运行中稍后被计算出来的值。3)c++没有定义转换单元上全局对象的构造原创 2012-03-10 13:10:44 · 3117 阅读 · 0 评论 -
函数调用约定
函数调用约定就是描述参数如何传递,堆栈由调用方还是被调用方平衡,返回值如何返回等规则。函数调用约定的几种类型有:__stdcall, __cdecl, __fastcall, __thiscall, __nakedcall, __pascal下面介绍几种常见的函数调用约定(以VS2010编译器为例):(1) __cdecl调用约定1. 参数从右向左传递,放在栈中2. 栈平衡由调原创 2012-11-26 21:31:00 · 4920 阅读 · 5 评论 -
深入理解C/C++数组和指针
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/7044380C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针。一、数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值。数组可以在某些情况下转换为指针,当数组名原创 2011-12-06 00:08:06 · 17218 阅读 · 29 评论 -
c++空白基类最优化(EBO或EBCO)
对于c++中的一个空类 class X{}; 事实上并不是空的,sizeof(X)并不等于0, 一般的结果是1。每个X的对象都有一个隐晦的1 bytes,是被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址。当X作为另一个类的成员时,如:class A{public: X x; int a;原创 2013-01-11 16:51:24 · 3506 阅读 · 0 评论 -
“火柴棍式”程序员面试题
原文作者:陈皓,原文地址:http://coolshell.cn/articles/3961.html有时候,有些面试题是很是无厘头,这不,又有一个,还记得小时候玩的的“火柴棍游戏”吗,就是移动一根火柴棍改变一个图或字的游戏。程序面试居然也可以这么玩,看看下面这个火柴棍式的程序面试题吧。下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正转载 2013-05-08 23:28:43 · 2814 阅读 · 0 评论