共享記憶體是一種程序間通訊的方式,速度比較快
基本原理:以頁面為單位,將乙個普通檔案對映到記憶體中,達到共享記憶體和節約記憶體的目的,通常在需要對檔案進行頻繁讀寫時使用,這樣用記憶體讀寫取代i/o讀寫,以獲得較高的效能
windows和linux都提供了原生的系統級的c++介面,可以將檔案對映到記憶體
linux使用mmap
**示例
這裡實現了兩個程序,writer程序往共享記憶體裡寫資料,reader程序從共享記憶體裡讀資料
main_writer.cpp
#include
#include
#include
#include
#ifdef _win32
#include
#elif __linux
#include
#include
#include
#include
#endif
using
namespace
std;
#ifdef _win32
struct mydata
};void writememory()
else
cout
<< endl;
}#elif __linux
struct mydata
;void writememory()
; // create mmap file
int fd = open(shared_file_name, o_creat | o_rdwr | o_trunc, 00777);
if (fd < 0)
cout
<< "create file error"
<< endl;
size_t write_size = sizeof(share_buffer);
ftruncate(fd, write_size); // extend file size
// map memory to file
void *p = mmap(null, write_size, prot_read | prot_write, map_shared, fd, 0);
// copy data to shared memory
memcpy(p, &share_buffer, write_size);
cout
<< "already write to shared memory, wait ..."
<< endl;
//cout << share_buffer << endl;
this_thread::sleep_for(chrono::seconds(10));
// unmap and close
munmap(p, write_size);
close(fd);
}#endif
int main()
main_reader.cpp
#include
#include
#ifdef _win32
#include
#elif __linux
#include
#include
#include
#include
#endif
using
namespace
std;
#ifdef _win32
struct mydata
};void readmemory()
;//strcpy(share_buffer, (char *)lp_base);
char *share_buffer = (char *)lp_base;
cout
<< share_buffer << endl;
/*mydata *my_data = (mydata *)lp_base;
cout << my_data->name << " " << my_data->age << endl;*/
// close share memory file
unmapviewoffile(lp_base);
closehandle(shared_file_handler);
}else
cout
<< endl;
}#elif __linux
struct mydata
;void readmemory()
#endif
int main()
注意: Windows共享記憶體
windows共享記憶體可以讓兩個程序對同一塊記憶體進行讀寫。a.cpp include include include include include using namespace std define buf size 256tchar szname text 指向同一塊共享記憶體的名字 in...
Windows共享記憶體示例
windows共享記憶體可以讓兩個程序對同一塊記憶體進行讀寫。a.cpp include include include include include using namespace std define buf size 256tchar szname text 指向同一塊共享記憶體的名字 in...
Windows共享記憶體示例
windows共享記憶體示例 共享記憶體主要是通過對映機制實現的。下面舉例說明如何將記憶體對映檔案用於共享記憶體。第一次執行這個例子時,它建立了共享記憶體,並寫入資料 this is common data 只要建立共享記憶體 的程序沒有關閉控制代碼hmap,以後執行的程式就會讀出共享記憶體裡面的資...