我試圖創建一個結構數組作爲一種基本的緩存。索引到mmap中?
給出一個void *指針指向mmap,mmap是否提供了索引到它的任何可供性?我認爲,從概念上講,mmap只是提供了一塊內存,但後來我對我能用它做什麼感到困惑。我可以把它想成一個malloc嗎?
void * mptr = mmap(NULL, 1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
感謝您對此處的任何澄清。
我試圖創建一個結構數組作爲一種基本的緩存。索引到mmap中?
給出一個void *指針指向mmap,mmap是否提供了索引到它的任何可供性?我認爲,從概念上講,mmap只是提供了一塊內存,但後來我對我能用它做什麼感到困惑。我可以把它想成一個malloc嗎?
void * mptr = mmap(NULL, 1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
感謝您對此處的任何澄清。
是的,你可以認爲它是一個malloc,但你必須使用munmap(mptr,1024 * 1024)而不是free(mptr)來釋放它。
如果你想索引到它,將它轉換爲另一種類型,例如字符:
char *cptr = (char*) mptr;
然後你可以索引使用它CPTR [10],例如。
不管你使用什麼分配器(mmap
,malloc
,sbrk
,...),你仍然留有一個指向內存的指針。在使用內存之前,您必須告知編譯器在內存中是否存在類型。使用C風格或C++轉換來告訴編譯器如何處理內存。
相反,將其視爲mmap :) mmap將數據映射到虛擬內存地址,CPU將使用MMU將其轉換爲物理地址。 http://en.wikipedia.org/wiki/Memory_management_unit。你可以用mmap做很多事情,例如讀取/寫入虛擬內存地址,並使用PROT_EXEC在其上執行代碼。您可以創建匿名地址,您可以使用MAP_SHARED等共享進程之間的虛擬地址。 – jarryd 2012-04-04 02:32:39