Без HeapAlloc

Discussion in 'WASM.WIN32' started by _Juicy, Mar 11, 2012.

  1. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    Задача такая: в процессе выполнения логгировать (выводить в файл, отправлять другому процессу - неважно, главное - сохранять) некоторую информацию так, чтобы не было вызовов RtlAllocateHeap. Какие есть варианты решения?
    Параллельная задача: добавить свой код в некий процесс, опять же не трогая хип.
    Заранее спасибо.
     
  2. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    А кто вам мешает? Это всё какбэ абсолютно не связанные вещи.
     
  3. Incidence

    Incidence New Member

    Blog Posts:
    0
    Joined:
    Dec 26, 2011
    Messages:
    236
    Location:
    Kiev, UA
    А VirtualAlloc трогает хип?
     
  4. ziral2088

    ziral2088 New Member

    Blog Posts:
    0
    Joined:
    Aug 16, 2009
    Messages:
    283
    Incidence
    Нет.
     
  5. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    ziral2088, а VirtualAlloc где выделит память?
     
  6. ziral2088

    ziral2088 New Member

    Blog Posts:
    0
    Joined:
    Aug 16, 2009
    Messages:
    283
  7. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    Ч.г. после этой ссылки у меня все равно остались сомнения... Ну ок, спасибо, буду пробовать.
     
  8. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    Статический буфер можно использовать, если известен макс. размер данных.
     
  9. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    Использовать-то можно, а вот как выводить/сохранять?
     
  10. 100gold

    100gold New Member

    Blog Posts:
    0
    Joined:
    Feb 26, 2010
    Messages:
    165
    NtOpenFile и NtWriteFile подойдут?
     
  11. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    100gold, вероятно... Спасибо.
     
  12. Malfoy

    Malfoy New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2012
    Messages:
    698
    А чем хип вам не угодил ?

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

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    А еще есть GlobalAlloc.
     
  14. zxcv

    zxcv New Member

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

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

    Ursus Member

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

    Ursus Member

    Blog Posts:
    0
    Joined:
    Mar 15, 2006
    Messages:
    238
    Location:
    Russia
    Да, после Джордано Бруно у людей тоже остались сомнения, что Земля вертится.
     
  17. _Juicy

    _Juicy Active Member

    Blog Posts:
    0
    Joined:
    Aug 12, 2003
    Messages:
    1,159
    Location:
    SPb
    Ursus, остались сомнения, что его использование не повлияет на распределение в хипе.

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

    zxcv New Member

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

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

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

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Squash
    Catch a kiss.
     
  20. rpy3uH

    rpy3uH New Member

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

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