![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| panya2907 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
В Win32 три механизма управления памятью:
• виртуальная память, используемая для операций с большими массивами объектов или структур; • кучи (heaps), применяемые для операций с большим количеством малых объектов; • файлы, проецируемые в память средства для операций с интенсивными потоками данных (обычно из файлов) и для обеспечения совместного доступа приложений к данным. Меня интересует именно первый пункт. Никак не могу найти нормального примера исползования виртуальной памяти для операций с большивыми обьектами. Кто-нибудь может подлиться полезными ссылками или знаниями. Или что-н. как http://catch22.net/tuts/bigmem01 только именно при испльзование виртуальной памяти а не memory-mapped-files. P.S: в С++ и WIN API я лузер,поэтому, если вопрос глупый, заранее прошу прощения. Thanks in advance. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
А что ты рассчитываешь найти? Нет никаких спец. механизмов для работы "с большими объектами". Выделение памяти - VirtualAlloc, освобождение - VirtualFree. Получаешь кусок памяти и делай с ним что хочешь. Сам. Если объект хоть сколько-нибудь сложный, умаешься, т.к. нужно писать свои аллокаторы, чтобы все его части распределять в выделенном куске. ИМХО, такую память разумнее всего использовать как плоскую, что-то типа файла, но с быстрым произвольным доступом. Т.е. сериализовать свои большие объекты. А для удобства манипуляции с ними написать либо объектные обертки, либо временные объекты с удобной структурой, в которую объект будет разворачиваться на время манипуляций. Пример. Есть много, скажем, мультиполилиний, т.е. полилиний, которые состоят из нескольких кусков (это может быть полигон с дырками или что-то еще). Для работы (редактирования) удобнее всего представить такой объект в виде вектора векторов вершин. Но если таких объектов десятки и сотни тысяч, то вплотную встает вопрос о памяти. Куча рано или поздно треснет. Да и перерасход на поддержку кучи указателей (и свободных хвостов векторов) слишком велик, тем более, что единовременно редактируется, скорее всего, один объект. Поэтому все эти полилинии лучше хранить в сериализованном виде, например, в формате функции PolyPolyline, в виде непрерывного блока памяти. Тогда потребуется минимальный код для управления этим безобразием. И все это вполне можно запихать в виртуальную память, или в файл-маппинг, или еще куда-нибудь. -------------------- ... |
|||
|
||||
| panya2907 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Thanks
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |