2012-02-21 65 views
0

我試圖創建一個結構數組作爲一種基本的緩存。索引到mmap中?

給出一個void *指針指向mmap,mmap是否提供了索引到它的任何可供性?我認爲,從概念上講,mmap只是提供了一塊內存,但後來我對我能用它做什麼感到困惑。我可以把它想成一個malloc嗎?

void * mptr = mmap(NULL, 1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); 

感謝您對此處的任何澄清。

+0

相反,將其視爲mmap :) mmap將數據映射到虛擬內存地址,CPU將使用MMU將其轉換爲物理地址。 http://en.wikipedia.org/wiki/Memory_management_unit。你可以用mmap做很多事情,例如讀取/寫入虛擬內存地址,並使用PROT_EXEC在其上執行代碼。您可以創建匿名地址,您可以使用MAP_SHARED等共享進程之間的虛擬地址。 – jarryd 2012-04-04 02:32:39

回答

1

是的,你可以認爲它是一個malloc,但你必須使用munmap(mptr,1024 * 1024)而不是free(mptr)來釋放它。

如果你想索引到它,將它轉換爲另一種類型,例如字符:

char *cptr = (char*) mptr; 

然後你可以索引使用它CPTR [10],例如。

1

不管你使用什麼分配器(mmap,malloc,sbrk,...),你仍然留有一個指向內存的指針。在使用內存之前,您必須告知編譯器在內存中是否存在類型。使用C風格或C++轉換來告訴編譯器如何處理內存。