Без HeapAlloc

Тема в разделе "WASM.WIN32", создана пользователем _Juicy, 11 мар 2012.

  1. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Задача такая: в процессе выполнения логгировать (выводить в файл, отправлять другому процессу - неважно, главное - сохранять) некоторую информацию так, чтобы не было вызовов RtlAllocateHeap. Какие есть варианты решения?
    Параллельная задача: добавить свой код в некий процесс, опять же не трогая хип.
    Заранее спасибо.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А кто вам мешает? Это всё какбэ абсолютно не связанные вещи.
     
  3. Incidence

    Incidence New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2011
    Сообщения:
    236
    Адрес:
    Kiev, UA
    А VirtualAlloc трогает хип?
     
  4. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Incidence
    Нет.
     
  5. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    ziral2088, а VirtualAlloc где выделит память?
     
  6. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
  7. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Ч.г. после этой ссылки у меня все равно остались сомнения... Ну ок, спасибо, буду пробовать.
     
  8. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Статический буфер можно использовать, если известен макс. размер данных.
     
  9. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Использовать-то можно, а вот как выводить/сохранять?
     
  10. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    NtOpenFile и NtWriteFile подойдут?
     
  11. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    100gold, вероятно... Спасибо.
     
  12. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    А чем хип вам не угодил ?

    Тогда юзайте как я - нэйтив, а не виньапи.
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    А еще есть GlobalAlloc.
     
  14. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    Squash
    тут еще есть такой момент, что все эти сохранения и отправки будут брать время. не знаю специфики задачи, но в некоторых применениях такое может быть критично.
    возможно, отдельный поток? а там хоть кольцевой буфер в стеке

    адд.
    а если все равно в файл и нету противопоказаний, то отчего не мапить сразу в тот файл? заодно, если в другой процесс на чтение, то нет нужды бурить еще путь
     
  15. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Есть-то она есть, но ето всего лишь обертка над HeapAlloc.
    С другой стороны, непонятно, чем аффтару так не угодил HeapAlloc.
    Попахивает какой-то религиозной фобией.
     
  16. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Да, после Джордано Бруно у людей тоже остались сомнения, что Земля вертится.
     
  17. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Ursus, остались сомнения, что его использование не повлияет на распределение в хипе.

    _DEN_, Booster
    не раздражайте меня.
     
  18. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    Squash
    хиперы (системный, С-рантаймовый, С++ рантаймовый могут быть разными) действуют так - хипер получает страницы, бьет их на части запрошенного размера и сохраняет структуру разбиения гдето тамже

    те, страницы выделенные не хиперу (виртуал аллок, мап) хиперу не видны вообще (найти их конечно можно если нужно), те никак не влияют
    (есть только тонкость - если ваш хипер гц-базед и вы будете перекидывать переменные из него через вашу тень, то можете нарваться на неприятный сюрприз)

    кстати, виртуал аллок и мапы напрямую транслируются в сисколы. так что, если вы хотите скрыть вызова апи вообще, то можете этим воспользоваться
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Squash
    Catch a kiss.
     
  20. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    если у аффтара фобия от HeapAlloc и он упорот, то можно написать свои минилибу аналогичную HeapAlloc : выделить большой регион через VirtualAlloc, завести массив описателей выделенных и не выделенных кусков и при вызове функции MyCoolHeapAlloc находить свободный кусок буфере и передавать на него указатель. (заодно можно реализовать какую угодно гранулярность выделения кусков). Алсо, можно прикруть свистелки и перделки, блекджек и шлюхи и расширять(или уменьшать) основной регион по мере необходимости.

    вопрос совсем другой: а смысл?