从专业人员到超级专业人员的任何问题 - 1。 - 页 28 1...212223242526272829303132333435...45 新评论 Vadim Zhunko 2011.09.09 17:40 #271 // 2.2.6. Метод меняет размер отведённой памяти для файлового отображения. Метод в случае успешного завершения возращает TRUE или FALSE в случае ошибки. bool Resize(const DWORD64 dw64BytesMapping) // Количество резервируемой памяти для файлового отбражения. { DWORD dwErrorCode = 0; // Последняя ошибка. tstringstream ssExclusion; // Строка с сообщением об ошибке. dw64Bytes = dw64BytesMapping; ::SetLastError(0); // Сбрасываем последнюю ошибку. // Контроллируем на наличие дескриптора файла и имени файлового отображения. if (hFile == NULL && sName == _T("")) { if (DEBUGGING || DEBUGGING_EXCLUSION) { ssExclusion << std::endl << _T("Ошибка в методе \"Utils::MappingSTL::Resize()\".") << std::endl << _T("Отсутствуют дескриптор пользовательского") << std::endl << _T("файла и имя файлового отображения.") << std::endl; if (DEBUGGING) tcout << ssExclusion.str(); if (DEBUGGING_EXCLUSION) throw(ssExclusion.str()); } return(false); } // Создаем или открываем уже существующее отображение файла по дескриптору пользовательского файла. vhMapping.push_back(::CreateFileMapping(hFile, NULL, PAGE_READWRITE, Utils::FILESIZE64(dw64Bytes).dwSizeHigh, Utils::FILESIZE64(dw64Bytes).dwSizeLow, sName.c_str())); // Если получен не верный указатель на файловое отображение. if (vhMapping.back() == NULL) { if (DEBUGGING || DEBUGGING_EXCLUSION) { dwErrorCode = ::GetLastError(); // Получаем последнюю ошибку. ssExclusion << std::endl << _T("Ошибка в методе \"Utils::MappingSTL::Resize()\".") << std::endl << _T("Размер памяти файлового отображения \"") << sName << _T("\" не изменён.") << std::endl << LAST_ERROR_PARAMETER(dwErrorCode) << std::endl; if (DEBUGGING) tcout << ssExclusion.str(); if (DEBUGGING_EXCLUSION) throw(ssExclusion.str()); } return(false); } return(true); } 这是一个来自映射类的方法。 TheXpert 2011.09.09 17:48 #272 Zhunko: 这是一个来自映射类的方法。 那又怎样? 没有涉及映射大小调整的主题。 Vadim Zhunko 2011.09.09 18:45 #273 这就是我的工作。 TheXpert 2011.09.09 19:08 #274 Zhunko: 这就是我的工作。 也就是说,当你打开一个具有相同名称和不同尺寸的映射时,它就会改变尺寸? 你不需要回答,反正代码里没有这一条。你在那里做什么与这个问题关系不大 :) 所以祝你好运。 Vadim Zhunko 2011.09.09 23:59 #275 当然是这样。我有一个关于这个类的库,可以使用。测试很好。这个库的第一个变体是在猪圈。 最新版本的库本身根据需要改变大小。 --- 2011.09.10 09:30 #276 TheXpert: 因此,当你打开一个具有相同名称和不同尺寸的映射时,它就会改变尺寸? 你不需要回答,反正代码里没有这个内容。你在那里做什么与这个问题关系不大 :) 所以祝你好运。 安德鲁,我重新检查了两种方式。 嗯,是的。 当你用相同的名字但用更大的尺寸调用CreateFileMapping时,内存会被扩展。 最主要的是,CreateFileMapping的第一个句柄不应该被关闭(只是为了避免丢失之前的内容)。 但是!在第二种情况下,我测试了一个更有趣的假说。 一个CreateFileMapping被创建,有一个初始大小(例如2字节),4个字节被写入它。而且,它还会自动扩展自己! 所以没有必要创建第二个具有更大尺寸的CreateFileMapping句柄。 我认为这个问题已经结束。 Vadim Zhunko 2011.09.10 10:01 #277 sergeev: 但是!第二个案例更有趣地检验了这个假设。 CreateFileMapping的创建有一个初始大小(例如2个字节),4个字节被写入它。而且,它还会自动扩展自己! 所以没有必要创建第二个具有更大尺寸的CreateFileMapping句柄。 我认为这个问题已经结束。 这是在描述中。这很方便,但它只会增加尺寸。占用了资源。你必须制作你自己的内存管理器。 --- 2011.09.10 10:07 #278 Zhunko: 这是在描述中。 在描述什么? 这就是我需要的,让我的记忆力提高。 Vadim Zhunko 2011.09.10 10:25 #279 sergeev: 在描述什么? 我需要它被释放。 MSDN :-)) 我的意思是,如果内存消耗增加,你必须释放它。 --- 2011.09.10 10:34 #280 当关闭句柄时,内存(已经分配了超过CreateFileMapping中指定的内存)是不是不会再恢复了? 1...212223242526272829303132333435...45 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是一个来自映射类的方法。
那又怎样?
没有涉及映射大小调整的主题。
这就是我的工作。
也就是说,当你打开一个具有相同名称和不同尺寸的映射时,它就会改变尺寸?
你不需要回答,反正代码里没有这一条。你在那里做什么与这个问题关系不大 :) 所以祝你好运。
当然是这样。我有一个关于这个类的库,可以使用。测试很好。这个库的第一个变体是在猪圈。
最新版本的库本身根据需要改变大小。
因此,当你打开一个具有相同名称和不同尺寸的映射时,它就会改变尺寸?
你不需要回答,反正代码里没有这个内容。你在那里做什么与这个问题关系不大 :) 所以祝你好运。
安德鲁,我重新检查了两种方式。
嗯,是的。 当你用相同的名字但用更大的尺寸调用CreateFileMapping时,内存会被扩展。
最主要的是,CreateFileMapping的第一个句柄不应该被关闭(只是为了避免丢失之前的内容)。
但是!在第二种情况下,我测试了一个更有趣的假说。
一个CreateFileMapping被创建,有一个初始大小(例如2字节),4个字节被写入它。而且,它还会自动扩展自己!
所以没有必要创建第二个具有更大尺寸的CreateFileMapping句柄。
我认为这个问题已经结束。但是!第二个案例更有趣地检验了这个假设。
CreateFileMapping的创建有一个初始大小(例如2个字节),4个字节被写入它。而且,它还会自动扩展自己!
所以没有必要创建第二个具有更大尺寸的CreateFileMapping句柄。
我认为这个问题已经结束。这是在描述中。
在描述什么? 这就是我需要的,让我的记忆力提高。
在描述什么? 我需要它被释放。
MSDN :-))
我的意思是,如果内存消耗增加,你必须释放它。