ip phone日誌5

今天一口氣把監控模塊框架寫了.
監控模塊設計步驟如下:

建立一個定時器:(用於定時監控每模塊是否活着)
建立一個隊列:(用於接收各模塊的迴應消息)

while(recv(queue))
{
    switch(msg)
        timer:
            if(is_all_alive)
                發送監控消息給所有模塊                
            else
                發送消息給主控
        other module:
                此模塊活着
        .....:
                此模塊活着
                

}

timer
{
    發送定時消息給自己模塊
}
再接着把內存管理的代碼也寫了:
設計要求:
        可查詢當前內存的申請情況(長度,種類和種類的大小,及申請的文件名,行數)
        限制申請長度超過內存最大長度
#define NUM_BLOCKS 128//申請次數
#define NUM_SIZES  64//申請的種類
#define MAX_MEM_SIZES 1024*1024 // 1M 內存
static BlockEntry blocks[NUM_BLOCKS];
static Counter counters[NUM_SIZES];

static void incrementCountForSize(size_t size);
static void decrementCountForSize(size_t size);

static long FS_totalAllocated = 0;
 
void *mMallocLineFile(size_t size, int line, char *file)
{
 int i;
 if((FS_totalAllocated+size)>MAX_MEM_SIZES)
  return;
 void *newAllocation = malloc(size);

 for (i = 0; i < NUM_BLOCKS; i++)
 {
  if (blocks[i].addr == 0)
  {
   // found empty entry; use it
   blocks[i].addr = newAllocation;
   blocks[i].size = size;
   blocks[i].line = line;
   blocks[i].file = file;
   incrementCountForSize(size);
   break;
  }
 }
 assert(i < NUM_BLOCKS);

 FS_totalAllocated += size;
 return newAllocation;
}


void mFree(void *blockToFree)
{
 int i;
 for (i = 0; i < NUM_BLOCKS; i++)
 {
  if (blocks[i].addr = = blockToFree)
  {
   // found block being released
   decrementCountForSize(blocks[i].size);
   FS_totalAllocated -= blocks[i].size;
   blocks[i].addr = 0;
   blocks[i].size = 0;
   break;
  }
 }
 assert(i < NUM_BLOCKS);

 free(blockToFree);
}


void mDisplayTable(void)
{
 printf("%s", "/nSize/tFreq.");
 for (int i = 0; i < NUM_SIZES; i++)
 {
  if (counters[i].size = = 0) break;
  printf("/n%d/t/t%d", counters[i].size, counters[i].count);
 }
}

void mClearTable(void)
{
 for (int i = 0; i < NUM_SIZES; i++)
 {
  counters[i].size = 0;
  counters[i].count = 0;
 }
}    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章