Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 11:13   #1
OktXIV
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 18
По умолчанию CreateFileMapping. Размер проецируемого файла

Создаю проецируемый файл:
CreateFileMapping(INVALID_HANDLE_VA LUE, NULL, PAGE_READWRITE, 0, 100, L"FileName");

Если я все правильно понял размер его будет - 100 Байт. Этот размер нельзя превышать.

Вопрос:

Что произойдет с размером и содержимым проецируемого файла если вызвать:
CreateFileMapping(INVALID_HANDLE_VA LUE, NULL, PAGE_READWRITE, 0, 200, L"FileName");

ИЛИ

CreateFileMapping(INVALID_HANDLE_VA LUE, NULL, PAGE_READWRITE, 0, 50, L"FileName");

По моей информации в первом случае размер увеличится и содержимое сохранится.

Непонятен второй вариант, где размер задан 50 Байт. Уменьшится ли размер?

Если ошибаюсь во всем, распишите первый и второй случай.
OktXIV вне форума Ответить с цитированием
Старый 16.02.2013, 11:19   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

RTFM
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Цитата:
If the object exists before the function call, the function returns a handle to the existing object (with its current size, not the specified size), and GetLastError returns ERROR_ALREADY_EXISTS.
Somebody вне форума Ответить с цитированием
Старый 16.02.2013, 11:55   #3
OktXIV
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 18
По умолчанию

Сколько памяти я имею в распоряжении?

вызвав:

CreateFileMapping(INVALID_HANDLE_VA LUE, NULL, PAGE_READWRITE, 0, sizeof(DWORD), L"MapFileName);

Почему у меня получается записывать в:

LPVOID MapView =MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD));
DWORD v =123;
DWORD* p =(DWORD*)MapView;
memcpy(&p[5], &v, sizeof(DWORD));
OktXIV вне форума Ответить с цитированием
Старый 16.02.2013, 15:27   #4
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Ничего не понял,что хочет топикстартер. Сколько памяти можно спроецировать? До 4 гб на х86 и до 16 эксабайт на х64.
Я делаю так: CreateFile -> GetFileSize -> CreateFileMapping -> MapViewOfFileEx и всё нормально работает
calypso вне форума Ответить с цитированием
Старый 16.02.2013, 18:40   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

топикстартер жалуется, что может писать за пределы заявленной памяти.

Память выделяется страницами, обычно по 4К (для 32бит систем).
waleri вне форума Ответить с цитированием
Старый 16.02.2013, 19:57   #6
OktXIV
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 18
По умолчанию

Все понял.

Благодарю.
OktXIV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер файла саша40 Общие вопросы Delphi 2 17.10.2012 17:20
Работа с CreateFileMapping. С++ Angriff Помощь студентам 0 16.03.2012 18:58
Размер файла Димонн Помощь студентам 2 21.09.2010 08:40
Размер файла NetSpace Свободное общение 2 15.06.2009 13:36
Размер файла Tesmont Помощь студентам 1 15.05.2009 17:31