請看下面的代碼。內存映射文件的奇怪行爲,一些觀察和一些問題
#include <windows.h>
void Write(char *pBuffer)
{
// pBuffer -= 4*sizeof(int);
for(int i = 0; i<20; i++)
*(pBuffer + sizeof(int)*i) = i+1;
}
void main()
{
HANDLE hFile = ::CreateFile("file", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
::MessageBox(NULL, "", "Error", 0);
return;
}
HANDLE hMMF = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 32, NULL);
char *pBuffer = (char*)::MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, 0);
Write(pBuffer);
::FlushViewOfFile(pBuffer, 100);
::UnmapViewOfFile(pBuffer);
}
當我嘗試寫過去分配的大小我已經只分配32個字節的是,我沒有得到任何錯誤的。這是由設計還是這是Windows代碼中的錯誤?但是,如果包含註釋部分,則會發生錯誤,如預期的那樣。
我問這個,因爲我正在考慮使用這個「功能」對我有利。我可以嗎?僅供參考,我有Win XP ver 2002 SP 3,但我懷疑這是「固定」在較新的Windows中,這可能會導致我的代碼IDK失效。任何有用的鏈接解釋一些內部的這將有助於。
感謝
是的,我確實嘗試超越4kB,現在我明白了。非常感謝。 – mousepad 2011-03-20 18:40:35