PROFIからSUPER PROFIへの質問-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: それが私の仕事です。 I.e.同じ名前で違うサイズのマッピングを開くと、サイズが変わってしまう? 答えなくていいよ、どうせコードに書いてないんだから。そこで何をするかは、質問とはあまり関係ありません :) ので、頑張ってください。 Vadim Zhunko 2011.09.09 23:59 #275 もちろん、そうでしょう。このクラスで動くライブラリがあるんです。テストは問題ない。このライブラリの最初のバリエーションは、貯金箱の中にあります。 最新版では、必要性に応じてライブラリ自体の大きさを変えています。 --- 2011.09.10 09:30 #276 TheXpert: では、同じ名前でサイズが異なるマッピングを開くと、サイズが変わってしまうのですか? 答えなくていいよ、どうせコードの中身は違うんだから。そこで何をするかは質問とはあまり関係ないので :) 頑張ってください。 アンドリュー 2通りを再確認しました。 同じ名前で、より大きなサイズのCreateFileMappingを呼び出すと、メモリが拡張されます。 主な内容は、CreateFileMappingの最初のハンドルを閉じてはいけないということです(以前の内容が失われるのを防ぐためです)。 しかし!2件目ではもっと面白い仮説を検証しました。 CreateFileMappingは、初期サイズ(例えば2バイト)で作成され、4バイトが書き込まれる。しかも、自動で拡張してくれるんです そのため、より大きなサイズの2つ目のCreateFileMappingハンドルを作成する必要はありません。 質問は終了しましたね。 Vadim Zhunko 2011.09.10 10:01 #277 sergeev: しかし!2件目はもっと面白い仮説が検証された。 CreateFileMappingは初期サイズ(例:2バイト)で作成され、4バイトが書き込まれる。しかも、自動で拡張してくれるんです そのため、より大きなサイズの2つ目の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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
マッピングクラスからのメソッドです。
それがどうした?
マッピングのリサイズに関するトピックはカバーしていません。
それが私の仕事です。
I.e.同じ名前で違うサイズのマッピングを開くと、サイズが変わってしまう?
答えなくていいよ、どうせコードに書いてないんだから。そこで何をするかは、質問とはあまり関係ありません :) ので、頑張ってください。
もちろん、そうでしょう。このクラスで動くライブラリがあるんです。テストは問題ない。このライブラリの最初のバリエーションは、貯金箱の中にあります。
最新版では、必要性に応じてライブラリ自体の大きさを変えています。
では、同じ名前でサイズが異なるマッピングを開くと、サイズが変わってしまうのですか?
答えなくていいよ、どうせコードの中身は違うんだから。そこで何をするかは質問とはあまり関係ないので :) 頑張ってください。
アンドリュー 2通りを再確認しました。
同じ名前で、より大きなサイズのCreateFileMappingを呼び出すと、メモリが拡張されます。
主な内容は、CreateFileMappingの最初のハンドルを閉じてはいけないということです(以前の内容が失われるのを防ぐためです)。
しかし!2件目ではもっと面白い仮説を検証しました。
CreateFileMappingは、初期サイズ(例えば2バイト)で作成され、4バイトが書き込まれる。しかも、自動で拡張してくれるんです
そのため、より大きなサイズの2つ目のCreateFileMappingハンドルを作成する必要はありません。
質問は終了しましたね。しかし!2件目はもっと面白い仮説が検証された。
CreateFileMappingは初期サイズ(例:2バイト)で作成され、4バイトが書き込まれる。しかも、自動で拡張してくれるんです
そのため、より大きなサイズの2つ目のCreateFileMappingハンドルを作成する必要はありません。
質問は終了しましたね。説明文に書いてありますね。
何の説明で? それは、私の記憶を呼び覚ますために必要なことです。
何の説明で? 解放してほしい。
MSDN :-))
つまり、メモリの消費量が増えたら、それを放出しなければならないのです。