2014-10-04 78 views
2

對於一個項目,我必須做我必須使用:使用mmap()來映射爲多個進程共享內存區域

void *ptr = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, 0, 0);

其中N是要求從RAM的字節數操作系統。

執行此語句時,ptr指向什麼?它是否指向進程之間共享內存的開始?另外,如果在這個內存空間中說我想存儲1000 int指針,我是否需要有N = 1000 * sizeof(int *);

並假設我是正確的,我可以在內存中存儲第二位的東西在哪裏?是否在ptr + 1ptr + 4,因爲int *在32位系統上是4個字節?

謝謝我欣賞它。

+0

是的,是和'((INT *)PTR)[1]'(這等同於'*(((INT *)PTR)+ 1)') – 2014-10-04 22:10:23

+1

您確定要'mmap()'一個標準的io流?我個人推薦'mmap(NULL,N,flags,flags,-1,0)'。 – EOF 2014-10-04 22:13:27

+0

這是我的導師給我們用來映射共享進程之間的區域區域@EOF – user3268401 2014-10-04 22:19:14

回答

1

因爲MMAP沒有在標準C定義,我假設你使用這樣的:http://linux.die.net/man/2/mmap

返回值IA指向內存:

成功時,mmap()的返回一個指向映射區域的指針。出錯時,返回值爲MAP_FAILED(即(void *)-1),並且適當地將errno設置爲 。成功時,munmap()返回0,失敗-1和 errno設置(可能爲EINVAL)。

您正在計算N正確。

但是,您可能會遇到問題,使用void *指針添加,因此將指針轉換爲int *以進行添加。

int* p = ptr; 
int* nextP = p + 1;