ACE的記憶體管理

2021-08-24 22:27:01 字數 2112 閱讀 7769

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...