写给c/c++的新同行门
越界是最难查的,注意memcpy strcpy,strncpy这些函数使用前一定要检查边界
特别是你提供函数给别人用时,你的函数中用到了这些东西,一定要检查别人传给你的指针的
边界
2、变量初始化
这种问题要养成好习惯,否则出来偶然性问题,非常难查
3、多线程指针管理
在多线程环境下使用指针时,最好采用引用计数,让最后一个放充引用计数时,指针删除,避免一个线程在使用指针,另外线程删除掉
4、多线程锁的管理
多线程锁要粒度要适中,尽量减少 一个函数 进入多个锁,避免一个大函数一个大锁影响性能,可学习数据库的表级,行级锁
尽量不要在回调函数中放锁,易 引起死锁
做到线程安全函数单向调用,上层往下层调用,下屋向上层采用事件驱动反馈,避免调用栈
过深,易引起死锁
,
5、多线程对象生存期管理
尽量当多线程共享对象 尽量不要直接删除,建议采用状态机形式来管理,其它线程设置状态
由一个线程统一按状态管理生存期
6、构造函数
函造函数中不要放虚函数,绝对不要在构造函数中开线程,并且线程调用自己的成员
7、内联
虚函数不要内联
8、多线程创建办法
如果用C运行库函数,要注意用C运行库的方法
9,内存管理
建议采用内存池管理
10、线程生存期管理
线程中尽量不要调用同步函数,不要强行杀线程,要让线程不断循环,等待死亡信号自己退出
相关文档:
1、两个float型数据相加,也都先转化成double型,然后再相加,以提高运算精度。
2、求字节运算符sizeof,记住它不是一个函数。
3、++,--运算符只能用于变量,而不能用于常量或者表达式。
4、++,--的结合方向是“自右向左”。
int i=3;
cout<<-i++<<endl;
cout< ......
索引:
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 ......
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.为什 ......
1.输入一段字母加数字的句子,然后输出其中有几组数字,并且输出各组数字,并对其求平均值(取整即可)
#include<stdio.h>
#include<math.h>
int main()
{
int i,x=0,t=0,n=0,p=0;
char a[90]={0};
scanf("%s",a);
printf("Found:");
for(i=0;i<90;i++)
{
if(a[i]&g ......
alloc.h
brk
【功能】更改数据段空间的分配
【原型】int brk(void *endds)
【位置】alloc.h
【说明】将程序数据段的顶部设置为endds所指向的内存位置。调用成功之后,返回0。如果调用失败则返回-1,同时设置errno。
【参见】coreleft
calloc
【功能】分配内存。
【原型】void *calloc(size_t nelem,size_t elsize) ......