- 静态分配变量地址好于堆分配的变量地址,堆分配地址好于栈分配变量,尤其是‘大’的变量,例如:
1. static unsigned int Table[10];
2. unsignded int *p=malloc(sizeof(int)*10)
3. void func(void)
{
unsigned int table[10];
//TODO:
}
以上三种变量分配方案1是最好的,3是最差的!!
- 传递消息指针地址好于传递消息本身,直接把消息数据传递给接收任务,避免不必要的消息队列,比如vxWroks中要传递长度为100字节的消息,如果使用vxworks的消息队列,下列2种方法:
STATUS SendMsg(int ID,int length)
{
.........
msg.cmdId=ID;
msg.dataLen=length;
msg.data=xxx;
msgQSend(rxQ,&msg,msg.len+sizeof(msg),-1,MSG_PRI_NORMAL)
}
STATUS SendMsg(int ID,int length)
{
.........
pMsg=malloc(sizeof(msg))
pMsg->cmdId=ID;
pMsg->dataLen=length;
pMsg->data=xxx;
msgQSend(rxQ,pMsg,sizeof(pMsg),-1,MSG_PRI_NORMAL)
}
rxQ任务中释放pMsg;
第二种方法好于方法1
3.socket通信时长消息好于多次短消息,长消息可以回避添加IP包头和checkSum等的开销
4.TBD