MapViewOfFile - Unexplainable Behaviour? or Task Manager problems?

Hello,

While playing about with CreateFileMapping, and MapViewOfFile, i have recently noticed Task manager reporting something very odd.

It would be easier to explain once you have seen my code.

HANDLE hFile = CreateFile ( "Test.abc", GENERIC_READ, FILE_SHARE_READ, NULL,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
HANDLE hFileMap = CreateFileMapping ( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
LPVOID      pMapping = (LPVOID)MapViewOfFile( hFileMap,  FILE_MAP_READ, 0, 0, 0 );

__asm
{
      mov            esi, pMapping
      mov            ecx, 1000000

copyloop:
      mov           al, byte ptr [esi]
      inc            esi

      dec            ecx
      jnz            copyloop
}
UnmapViewOfFile( pMapping );
CloseHandle( hFileMap );            
CloseHandle( hFile );

Now as you can see, all i do is open the file copy 1 byte into the register 'al', increase the file pointer by 1, then repeat.

Before any data is 'read' in Task Manager shows "mem usage" at 672 K. but after the loop has finished the mem usage is at 1,652K.

I cannot understand why the mem usage has increased. I am not allocating any memory, all I’m doing in copying 1 single byte to a register.

Could any one please offer me an Explanation to why this happens? and if possible how to stop it?

Thanks for reading.
bill553030Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

AlexFMCommented:
The MapViewOfFile function maps a view of a file into the address space of the calling process.
Windows is smart enough to do exactly what you ask it. It keeps file name and range of memory adresses to which this file is mapped. It doesn't use this memory yet. Only if you use this memory, it reads the file and memory usage grows.
To stop it commemt off asm block :-)
If you are interesting in such questions, read Jeffrey Richter's Programming Applications for Microsoft Windows 2000 - this is a best book about Windows programming.

0
bill553030Author Commented:
Ah i see now.

Is there any way of releasing the memory MapViewOfFile has used, without calling UnmapViewOfFile?
0
AlexFMCommented:
I don't think that such way exists.
The advantage of file mapping in PAGE_READONLY mode is that when Windows needs additional memory for some purposes, it saves some memory pages into the paging file. Memory loaded by read-only file mapping is not saved in the paging file, it is just overwritten. When this memory is needed again, it is reloaded from file opened by CreateFile and not from paging file. So, one time-consuming operation (copying of memory page to the hard disk) is not executed.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
bill553030Author Commented:
thanks very much.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Development

From novice to tech pro — start learning today.