ACE_Message_Block的分配器的使用方法

來源:互聯網
上載者:User
  ACE_Messae_Block中結合了ACE_Allocator,使ACE_Message_Block更加靈活,本文中將簡單介紹ACE_Message_Block和ACE_Allocator的使用方法,及注意事項。
  首先我們看看ACE_Message_Block的構著函數:ACE_Message_Block (size_t size,
                     ACE_Message_Type type = MB_DATA,
                     ACE_Message_Block *cont = 0,
                     const char *data = 0,
                     ACE_Allocator *allocator_strategy = 0,
                     ACE_Lock *locking_strategy = 0,
                     unsigned long priority = ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY,
                     const ACE_Time_Value &execution_time = ACE_Time_Value::zero,
                     const ACE_Time_Value &deadline_time = ACE_Time_Value::max_time,
                     ACE_Allocator *data_block_allocator = 0,
                     ACE_Allocator *message_block_allocator = 0);

    其中,使用了三個分配器,Allocator_stratey,data_block_allocator,message_block_allocator,這三個分配器是為ACE_Message_Block中兩個對象及器本身分配記憶體的,data_block, 以及data_block指向的char*記憶體。
    如此構著三個分配器傳入進去,就可以實現預先分配記憶體的效果。
   

msg_allocator_=new ACE_Cached_Allocator<ACE_Message_Block,ACE_SYNCH_MUTEX>(MsgCount);
    data_allocator_ =new ACE_Cached_Allocator<ACE_Data_Block,ACE_SYNCH_MUTEX>(BuffCount);
    buff_allocator_=new ACE_Cached_Allocator<MEM_BUF,ACE_SYNCH_MUTEX>(BuffCount);

   查看ACE_Message_Block的代碼,可以發現,在調用其Release方法時,會先檢查是否使用分配其,如果沒有使用,直接delete掉,如果使用了分配器,則把記憶體歸還給分配器。
    其中還必須注意一個參數,即locking_strategy,這是一把多線程同步的鎖,其主要時在進行淺層拷貝或者release時進行安全執行緒控制。比如,在調用duplicate或者release時要增減引用計數器。
    下次在寫怎樣合理使用locking_strategy,使其不影響效率,:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.