写给c/c++的新同行门
越界是最难查的,注意memcpy strcpy,strncpy这些函数使用前一定要检查边界
特别是你提供函数给别人用时,你的函数中用到了这些东西,一定要检查别人传给你的指针的
边界
2、变量初始化
这种问题要养成好习惯,否则出来偶然性问题,非常难查
3、多线程指针管理
在多线程环境下使用指针时,最好采用引用计数,让最后一个放充引用计数时,指针删除,避免一个线程在使用指针,另外线程删除掉
4、多线程锁的管理
多线程锁要粒度要适中,尽量减少 一个函数 进入多个锁,避免一个大函数一个大锁影响性能,可学习数据库的表级,行级锁
尽量不要在回调函数中放锁,易 引起死锁
做到线程安全函数单向调用,上层往下层调用,下屋向上层采用事件驱动反馈,避免调用栈
过深,易引起死锁
,
5、多线程对象生存期管理
尽量当多线程共享对象 尽量不要直接删除,建议采用状态机形式来管理,其它线程设置状态
由一个线程统一按状态管理生存期
6、构造函数
函造函数中不要放虚函数,绝对不要在构造函数中开线程,并且线程调用自己的成员
7、内联
虚函数不要内联
8、多线程创建办法
如果用C运行库函数,要注意用C运行库的方法
9,内存管理
建议采用内存池管理
10、线程生存期管理
线程中尽量不要调用同步函数,不要强行杀线程,要让线程不断循环,等待死亡信号自己退出
相关文档:
PART (1)
/*
===============================================
经典排序思想,并用C语言指针实现排序算法
================================================
*/
/*
=============================================================================
相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定 ......
ARM C嵌入式编程中的几个关键字
1、访问绝对地址的内存位置:
#define pISR_EINT0 (*(unsigned *) (_ISR_STRATADDRESS+0x74))
上述语句把无符号整数_ISR_STRATADDRESS+0x74强制转换为指针,指向RAM,用下面的语句可以访问它:
pISR_EINT0 = (int)Eint0_ISR
& ......
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 ......
Flex 和C++ 之间传输结构体数据
一直想试验用结构体传数据
但是Flex 和C++ 的类型所占的字节数有时不一样
如int 在C++中站2个字节,而在Flex中占4个字节。
转换比较麻烦。
最后决定用XML进行传输
然后两边都加一个XML 解析和封装类。
C++ 端使用的tinyXML 类
Flex直接使用自己带的 E4X 类
Flex代码如下
&nb ......