写给c/c++的新同行门
越界是最难查的,注意memcpy strcpy,strncpy这些函数使用前一定要检查边界
特别是你提供函数给别人用时,你的函数中用到了这些东西,一定要检查别人传给你的指针的
边界
2、变量初始化
这种问题要养成好习惯,否则出来偶然性问题,非常难查
3、多线程指针管理
在多线程环境下使用指针时,最好采用引用计数,让最后一个放充引用计数时,指针删除,避免一个线程在使用指针,另外线程删除掉
4、多线程锁的管理
多线程锁要粒度要适中,尽量减少 一个函数 进入多个锁,避免一个大函数一个大锁影响性能,可学习数据库的表级,行级锁
尽量不要在回调函数中放锁,易 引起死锁
做到线程安全函数单向调用,上层往下层调用,下屋向上层采用事件驱动反馈,避免调用栈
过深,易引起死锁
,
5、多线程对象生存期管理
尽量当多线程共享对象 尽量不要直接删除,建议采用状态机形式来管理,其它线程设置状态
由一个线程统一按状态管理生存期
6、构造函数
函造函数中不要放虚函数,绝对不要在构造函数中开线程,并且线程调用自己的成员
7、内联
虚函数不要内联
8、多线程创建办法
如果用C运行库函数,要注意用C运行库的方法
9,内存管理
建议采用内存池管理
10、线程生存期管理
线程中尽量不要调用同步函数,不要强行杀线程,要让线程不断循环,等待死亡信号自己退出
相关文档:
索引:
1 输入与输出
1.1 文件操作
1.1.1 fopen
1.1.2 freopen
1.1.3 fflush
1.1.4 fclose
1.1.5 remove
1.1.6 rename
1.1.7 tmpfile
1.1.8 tmpnam
1.1.9 setvbuf
1.1.10 setbuf
1.2 格式化输出
1.2.1 fprintf
1.2.2 printf
1.2.3 sprintf
1.2.4 snprintf
1.2.5 vprintf
1.2.6 vfprintf
1.2.7 vsprintf ......
http://www.gamedev.net/reference/programming/features/orgfiles/page2.asp
通过四个pitfall讲解头文件的由来和好处,以及使用头文件定义inline func and template.
Remember that, as far as the compiler is concerned, there is absolutely no difference between a header file and a source file.
The key idea ......
1.gcc包含的c/c++编译器
gcc,cc与c++,g++
gcc和cc是一样的,c++和g++是一样的。一般c程序就用gcc编译,c++程序就用g++编译。
2.gcc的基本用法
gcc test.c:如果没有指定输出的文件,默认将编译出一个名为a.out的程序
gcc test.c -o test:-o参数用来指定生成目标程序的名字,这样将编译出一个名为test的程序。
3.为什 ......
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。下面是Linux系统下用C语言创建的一个线程池。线程池 ......
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 ......