管理方法 內(nèi)存映射文件的原理?
內(nèi)存映射文件的原理?通俗點就是ReadFile和WriteFile這樣的I/O系統(tǒng)函數(shù)你學VC的總知道吧 在文件里來回地讀、寫、移動文件指針效率低 速度慢,CreateFileMapping函數(shù)允許應
內(nèi)存映射文件的原理?
通俗點就是ReadFile和WriteFile這樣的I/O系統(tǒng)函數(shù)你學VC的總知道吧 在文件里來回地讀、寫、移動文件指針效率低 速度慢,CreateFileMapping函數(shù)允許應用程序把文件映射到一個進程,這樣文件內(nèi)的數(shù)據(jù)就可以用內(nèi)存讀/寫指令來訪問,簡單多了 實用多了。這個不帶術(shù)語很難免的。。。再通俗點。。就是比如 要讀取一個文件里的東西 這時候你就得去硬盤讀,但是映射到內(nèi)存后 就可以直接對這塊內(nèi)存操作了;寫操作也一個意思。。。。。就是把要在硬盤上搞的東西 弄到內(nèi)存搞 搞起來方便 不用脫褲子直接就能搞。
給你一個含有1億個QQ號碼的文件,如何快速的查找某個QQ號碼?
記得可以編一個程序,好像是找定點字的那種。我就是記不住,人真的很笨。
內(nèi)存映射文件存儲空間不夠?
設(shè)一個偏移量,不要映射那么多。下面是別人的處理方法,抄來給你:使用內(nèi)存映射文件處理大文件的代碼示例:
1 SYSTEM_INFO sinf
2 GetSystemInfo(&sinf)
3
4 // Open the file for reading and writing.
5 HANDLE hFile = CreateFile(pszPathname, GENERIC_WRITE | GENERIC_READ, 0,6 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)7 if (hFile == INVALID_HANDLE_VALUE) {8 chMB("File could not be opened.")9 return(FALSE)10 }11 12 // Get the size of the file (I assume the whole file can be mapped) in bytes.13 DWORD dwFileSize = GetFileSize(hFile, NULL)14 15 // Create the file-mapping object.16 HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE,17 0, dwFileSize, NULL)18 if (hFileMap == NULL) {19 chMB("File map could not be opened.")20 CloseHandle(hFile)21 return(FALSE)22 }23 24 DWORD map_data_offset = 025 DWORD bytes_mapped = sinf.dwAllocationGranularity26 PVOID pvFile = NULL27 PSTR ps_ptr = NULL28 29 while(dwFileSize > 0)30 {31 if(dwFileSize
進程間通信,內(nèi)存映射和共享內(nèi)存的區(qū)別?
內(nèi)存映射文件是利用虛擬內(nèi)存把文件映射到進程的地址空間中去,在此之后進程操作文件,就像操作進程空間里的地址一樣了,比如使用c語言的memcpy等內(nèi)存操作的函數(shù)。這種方法能夠很好的應用在需要頻繁處理一個文件或者是一個大文件的場合,這種方式處理IO效率比普通IO效率要高
共享內(nèi)存是內(nèi)存映射文件的一種特殊情況,內(nèi)存映射的是一塊內(nèi)存,而非磁盤上的文件。共享內(nèi)存的主語是進程(Process),操作系統(tǒng)默認會給每一個進程分配一個內(nèi)存空間,每一個進程只允許訪問操作系統(tǒng)分配給它的哪一段內(nèi)存,而不能訪問其他進程的。而有時候需要在不同進程之間訪問同一段內(nèi)存,怎么辦呢?操作系統(tǒng)給出了創(chuàng)建訪問共享內(nèi)存的API,需要共享內(nèi)存的進程可以通過這一組定義好的API來訪問多個進程之間共有的內(nèi)存,各個進程訪問這一段內(nèi)存就像訪問一個硬盤上的文件一樣。而.Net 4.0中引入了System.IO. MemoryMappedFiles命名空間,這個命名空間的類對windows 共享內(nèi)存相關(guān)API做了封裝,使.Net程序員可以更方便的使用內(nèi)存映射文件。