در قسمت های قبل در مورد پایپ و به اشتراک گذاری حافظه در پراسس ها به اندازه کافی صحبت شد . اما در اون روش ما یک کپی از دیتا رو در اختیار پراسس های دیگر قرار میدادیم .
در این قسمت تصمیم داریم تا از روش دیگری استفاده کنیم ، در این روش ما یک آدرس از دیتای مورد نظر خودمون رو بین دو یا چند پراسس به اشتراک میگذاریم(بدون کپی کردن). بدلیل این که کپیی از آنها تهیه نمیکنیم سرعت انتقال بسیار بیشتر از استفاده از پایپ میبشد . اما باید این نکته را نیز در نظر داشت در انتقال حجم های کم این روش میتواند باعث افزایش بی دلیل داده گردد ، دلیل آن هم این است که چون مثلا پیج های حافظه ( اغلب ) به اندازه 4 کیلوبایت میباشد ،اگر ما داده ای را که به اندازه 3 کیلو بایت است را بین پروسس ها شیر کنیم ، مقدار 4 کیلوبایت شیر میگردد (چون هر پیج دارای 4 کیلوبایت است ) ، و بنابر این یک کیلوبایت اضافه شیر میگردد .
HANDLE WINAPI CreateFileMapping(
_In_ HANDLE hFile,
_In_opt_ LPSECURITY_ATTRIBUTES lpAttributes,
_In_ DWORD flProtect,
_In_ DWORD dwMaximumSizeHigh,
_In_ DWORD dwMaximumSizeLow,
_In_opt_ LPCTSTR lpName
);
LPVOID WINAPI MapViewOfFile(
_In_ HANDLE hFileMappingObject,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwFileOffsetHigh,
_In_ DWORD dwFileOffsetLow,
_In_ SIZE_T dwNumberOfBytesToMap
);
void CopyMemory(
_In_ PVOID Destination,
_In_ const VOID *Source,
_In_ SIZE_T Length
);