
C/C++
rocfu
钻研技术爱游戏屌丝一枚
展开
-
如何成为一个C++高级程序员
C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在 C++ 的使用范围比以前已经少了很多,java、C#、python 等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。 现在学习 java、C#等语言的人数远远高于C++转载 2012-03-12 15:05:37 · 462 阅读 · 0 评论 -
C/C++中几种函数调用方式的比较
1.cdecl: C的函数默认调用方式,适用可变参数,这种方式由于是函数调用者清理堆栈,所以又导致了生成代码增长(因为每次函数调用之后都是实现清理功能的代码,如果是函数自己清理,则只需要一份清理代码就可以了)2.stdcall: 函数清理堆栈,不可用于可变参数。3.fastcall: 类似stdcall, 但把因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX原创 2013-05-24 18:04:14 · 1047 阅读 · 0 评论 -
C++内存管理相关
1.定位new: new (addr) 类型。通过这种方式,可实现内存分配与对象构造的分离。2.利用标准库模板allocator,实现对象构造和内存分配的分离(如预先分配存储区但不构造),析构和内存释放的分离(如pop_back),一种可行的实现可能是利用上面的 定位new。3.new 和delete 的定制,类可以通过new, delete的操作符重载来接手内存的管原创 2013-05-16 21:09:19 · 542 阅读 · 0 评论 -
从printf的实现原理来谈对C/C++中可变参数函数的实现理解
printf函数原型:int _cdecl printf(const char*format, …);首先传递给函数的参数中要有函数用以了解到参数个数的信息,比如printf开始的format字符串,通过%来标识变量,如printf("hello my rank is %d in %d",i,j);printf搜寻第一个参数format指向的字符串"hello my rank is %原创 2012-03-20 22:50:30 · 1829 阅读 · 0 评论 -
printf以%d形式输出浮点数的问题
float value = 1.0;printf("value_int = %d\n", value); 对于上面的代码,会输出什么结果呢?(结果是0,当然这跟你的计算机是大端还是小端有关,大小端分析一样,这里是以小端为例)是不是觉得很奇怪,value的浮点数表示形式是0x3F800000,如果以整形输出,应该也是这个值的十进制表示才对的。单精度浮点数表示是:1位符原创 2013-05-24 20:46:15 · 7304 阅读 · 3 评论 -
C/C++编译链接原理
看了c++ primer,写过一些C++程序后,对其中的编译链接原理总是不明就里,想来这也难怪,因为平常都是在VS上,什么都是封装好了的,隐藏了太多的细节。本着自己一贯来对底层实现探究的兴趣,结合借鉴他人的想法,记下自己对C/C++编译链接原理的一些理解,要是能给看到此文章的你带来一丁点帮助就欣慰了。编译是把源文件经过预编译,优化,汇编翻译成机器语言的过程,这些机器语言代码数据以一定的格式CO原创 2012-03-20 12:29:52 · 1255 阅读 · 1 评论 -
C++高级机制-异常
C++异常机制的实现方式和开销分析:http://baiy.cn/doc/cpp/inside_exception.htmC++ 异常 与 ”为什么析构函数不能抛出异常“ 问题:http://www.cnblogs.com/zhyg6516/archive/2011/03/08/1977007.html1.当无异常抛出时,其开销就是在函数调用的时候将函数注册到异常处理链中,这些转载 2013-05-16 17:57:41 · 985 阅读 · 0 评论 -
Effective C++
1.尽量以const,enum,inline替换#define:编译器取代预编译器,错误追溯。2.为多态基类声明virtual析构函数:通过基类指针可以析构继承类对象。3.别让异常逃离析构函数:C++的异常实现机制一般都是不允许多重异常的,如果析构函数吐出异常,那么会出现资源泄露等不确定性行为或程序中止。异常发生时往往要回退并析构对象,那么从这点看析构函数也是不允许抛出异常转载 2013-05-16 17:33:23 · 499 阅读 · 0 评论 -
malloc,free,new,delete的比较
malloc和free是C标准库函数里的,声明在stdlib.h中,实现上都会通过系统调用让操作系统完成动态内存的分配或释放,具体实现是通过在划分的内存块前面设计一个长度字段和有效字段,当malloc时,搜寻内存池中不小于所要求字节数的内存块,设置内存块前面的长度字段并将有效字段置0。当free时,只需简单得通过指针向前找到该内存块的有效字段,置1重新定为有效即可。所以free是开销很小的,开销大原创 2012-03-21 22:37:32 · 544 阅读 · 0 评论 -
C++11新特性
1.右值引用与移动构造语义: 针对C++对临时变量只能以值或常引用的形式作为函数实参的问题,右指引用即临时变量对象的引用,可借此实现一种新的移动构造复制语义,避免对象拷贝赋值下的大量对象构造复制开销。http://bbs.chinaunix.net/thread-1251475-1-1.html2.通过使用 extern 来修饰一个模板类,告知编译器该模板无需在当前编译单元内原创 2013-05-16 18:11:37 · 708 阅读 · 1 评论