ace構架含有一組非常豐富的記憶體管理類。這些類使得你能夠很容易和有效地管理動態記憶體(從堆中申請的記憶體)和共享記憶體(在程序間共享的記憶體)。你可以使用若干不同的方案來管理記憶體。你需要決定何種方案最適合你正在開發的應用,然後採用恰當的
ace類來實現此方案。
ace含有兩組不同的類用於記憶體管理。
第一組是那些基於ace_allocator的類。這組類使用動態繫結和策略模式來提供靈活性和可擴充套件性。它們只能用於區域性的動態記憶體分配。
第二組類基於ace_malloc模板類。這組類使用c++模板和外部多型性(external polymorphism)來為記憶體分配機制提供靈活性。在這組類中的類不僅包括了用於區域性動態記憶體管理的類,也包括了管理程序間共享記憶體的類。這些共享記憶體類使用底層os(os)共享記憶體介面。
為什麼使用一組類而不是另外一組呢?這是由在效能和靈活性之間所作的權衡決定的。因為實際的分配器物件可以在執行時改變,ace_allocator類更為靈活。這是通過動態繫結(這在c++裡需要使用虛函式)來完成的,因此,這樣的靈活性並非不需要代價。虛函式呼叫帶來的間接性使得這一方案成了更為昂貴的選擇。
另一方面,ace_malloc類有著更好的效能。在編譯時,malloc類通過它將要使用的記憶體分配器進行配置。這樣的編譯時配置被稱為「外部多型性」。基於ace_malloc的分配器不能在執行時進行配置。儘管ace_malloc效率更高,它不像ace_allocator那樣靈活。
具體介紹請參考《ace程式設計師教程》內容。
這裡給出兩個例項的**,雖然書上有**,有些不是太全,少些標頭檔案之類。
allocator例項**:
#include "ace/synch_traits.h"
#include "ace/thread_mutex.h"
#include "ace/malloc.h"
#include "ace/malloc_t.h"
#include "ace/log_msg.h"
#include "ace/os.h"
#ifdef _debug
#pragma comment(lib,"aced.lib")
#else
#pragma comment(lib,"ace.lib")
#endif
typedef char memory_block[1024];
typedef ace_cached_allocator allocator;
class messagemanager
void allocate_msg(const char *msg)
void free_all_msg()
int n_blocks = ace_os::atoi(argv[1]);
messagemanager mm(n_blocks);
while (1)
//客戶端程序
static void client(void)
ace_os::printf(">>%s\n",(char*)message1);
ace_os::fflush(stdout);
void *message2;
if(shm_allocator.find("secondmessage",message2)==-1)
ace_os::printf(">>%s\n",(char*)message2);
ace_os::fflush(stdout);
ace_debug((lm_debug,"client done reading! bye now\n"));
ace_os::fflush(stdout);
ace_os::sleep(2);}
int main(int argc,char *argv)
//nt 環境下測試
//main函式放server()函式生成乙個版本server.exe,main函式放client()函式生成另乙個版本client.exe
//先執行server.exe,接著執行client.exe,就可以看到共享記憶體資料的效果。(注意:設定server.exe等待時間比client.exe長)
return 0;
}
ACE的記憶體管理
ace構架含有一組非常豐富的記憶體管理類。這些類使得你能夠很容易和有效地管理動態記憶體 從堆中申請的記憶體 和共享記憶體 在程序間共享的記憶體 你可以使用若干不同的方案來管理記憶體。你需要決定何種方案最適合你正在開發的應用,然後採用恰當的 ace類來實現此方案。ace含有兩組不同的類用於記憶體管理。...
ACE中的記憶體管理機制學習
ace記憶體分配有兩種方式,分別基於ace allocator基類和ace malloc類。1.基於ace allocator的分配方式,ace提供了多種allocator分配器 分配器 描述 ace allocator ace中的分配器類的介面類。這些類使用繼承和動態繫結來提供靈活性。ace ne...
ACE記憶體對映技術
多個作業系統平台都提供了記憶體對映檔案,這是乙個簡單的將資料結構儲存到檔案中的機制。同時由於32位作業系統的程序虛擬記憶體最大只能4gb,用記憶體對映檔案的方式就可以突破這個限制,可以用來開啟超過4gb的大檔案。而且,記憶體對映檔案其實就是一種共享記憶體機制,程序間可以通過共享記憶體直接訪問資料。a...