Резиновый буфер

Тема в разделе "WASM.WIN32", создана пользователем calidus, 7 окт 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Подкиньте варианты стабильных реализаций "Резиновых буферов" в примерах на асм. Есть некоторые варианты с васма. Но они отстойные до нехочу. Примеры работают с мелким количеством данных а с большим уходят в аут.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    ну как бы да =) но вот незадача , делал я так , динамический буфер шли названия папок. По мере прохождения мемкомит , вызывалась ошибка алокации , причина не ясна кода ошибки нет. Просто 0 и все. И с этого момента все идет прахом =) там всего то строчек то.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    В смысле кто-то не умеет пользоваться отладчиком?
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Это в смысле лень GetLastError вызвать? Тогда действительно см. отладчике, олька это за тебя сделает ;)

    Ну и запостил бы их, наверняка какой-нибудь мелкий ляп ;)
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    calidus
    Создаёшь секцию хз какого большого размера и проецируешь её.
     
  7. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Изначально в оле и было исследование =) запускаем мну в оле и идем на диск с папка виндовс , и там сразу в оле ве видно.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    А когда выделишь перегрузит :)))
     
  9. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Давайте конструктивно , если меткий взор увидел коментарий. То он должен был заметить что выделяется не 1 гб , а всего 20 метров. А некоторые коментарии там лишнии. Не было времени менять удалять и стирать.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    calidus
    Он не смотрел на числа, он посмотрел на флаг MEM_RESERVE.
    Она не выделяется, а резирвируется место в АП, далее попытка создать блок памяти пересекающийся с зарезервированным закончится неудачей, если по выбору системы - то она не будет использовать данный диапазон адресов. Выделяет память следующий сервис из зарезервированного блока.
    Все юзают секции, ну для вас это мэппинги(CreateFileMapping() и др.).
     
  11. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Clerk ну идея про секцию классно если подумать =) , есть ли примеры по мэпированию ?
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Там всё просто, тока хэндл файла ноль, чтобы своп заюзать.
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Енто как?
    У меня щелчёк по кнопке инфо или листвиеву вызывает месбох 1 егор, а кусок кода с VirtualAlloc не исполняется совсем ;)
    Разбирать все трудночитаемые навороты проги есно влом ;)
    Пример по меппированию, только имхо это не лучше VirtualAlloc, в которой у тебя ошибок не заметил ;)

    Кстати как выяснилось можно даже не резервировать, а сразу commit-ить 20 метров, тогда умная винда сама будет подбрасывать страницы по мере их реального использования без повторных вызовов VirtualAlloc ;)
    Clerk даже если закоммитить 1Гб, проверял из любопытства ;))

    add:
    Не всё так просто как казалось...
     
  14. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    ясный пень ошибка будет ...там же конектится надо. Конект а потом уже инфо. Нету там наворотов =) простое приложение. Спасибо за ссылки.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Y_Mur
    Я тоже проверял недавно, когда антитрассировку тестил. У меня полгига аперативы, выделял больше гига. Система страшно тормозила.
    Гораздо лучше.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А чем если не секрет?
    Хочешь сказать что если бы ты заюзал тот гиг через мэп он бы меньше тормозил ;)
     
  17. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Млин мне гиг не нужен. Мне надо чтоб не было проблем со смещением блоков памяти и добавлением к имеющимся данным данных новых неизвестной длины но явно не за 20 метров. Мэпинг пойдет ?
     
  18. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    calidus
    Делай
    VirtualAlloc, 0, 20*1024*1024, MEM_COMMIT, PAGE_READWRITE
    один раз и усё будет в порядке, если конечно дело в памяти, а не в чём то ещё ;)
    Кстати твой сервер запускал, коннект нажимал никакого эффекта.

    add:
    Не всё так просто как казалось...
     
  19. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) окей попробую , конект а потом гет инфо.
     
  20. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    calidus
    При SDELANO==TRUE происходит вызов VirtualAlloc по исходному адресу AllocedMemory с размером принимаемого пакета availablData. Это неверно, т.к. нужно учитывать размер ранее
    принятых\записанных данных, прибавляя его либо к адресу, либо к запрашиваемому размеру VirtualAlloc

    PS: Опять GlobalLock\GlobalUnlock >:dntknw: Задолбали бездумные пионеры :wall: