Стоит ли освобождать память в приложении...

Тема в разделе "WASM.BEGINNERS", создана пользователем int2e, 6 фев 2009.

  1. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    ...которое будет вызвано многократно в цикле?

    Есть приложение
    оно будет вызвано многократно в цикле
    Внутри приложения используются несколько буфферов
    Память под них выделяется в самом начале (VirtualAlloc для большого и new - для маленьких)
    И используются буфферы до самого завершения приложения


    Вопрос - нужно ли перед ExitProcess(0) вызывать VirtualFree и delete?
    Т.к. после ExitProcess() все буфферы автоматически будут освобождены, и меня интересует, с точки зрения производительности - освобождать вручную или позволить это сделать системе после завершения процесса?
     
  2. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    В нормальных языках давно есть gc
     
  3. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    Я уверен что в VS2008 в С++ он тоже есть, но я не знаю что это такое ))))))
    Объясните что это и для чего и как использовать :)
     
  4. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Все там освбождается, все ресурсы. Не волнуйся.
     
  5. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    int2e
    В принципе, можно не освобождать. Но я всё-таки считаю, что лучше всегда это делать самостоятельно -- для того, чтобы дисциплинировать самого себя, приучить убирать за собой. Когда ручная уборка будет доведена до автоматизма, существенно сократится риск появления утечек памяти :)
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Хорошим тоном является освобождение памяти. Но с технической стороны, имхо, можно ничего не делать
     
  7. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    Такс..стоп... освобождается только то, что выделено new

    А как на счет VirtualAlloc ??
    Такие буфферы так же присутствуют и вряд ли С++ принудительно вызывает VirtualFree
    По крайней мере в импорте я ее не нашел

    Поэтому вопрос в силе

    Стоит ли освобождать вручную все буфферы, или доверить это системе (после ExitProcess) ??
    С точки зрения производительности что лучше?
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    освобождается все, что было в адресном пространстве процесса + закрываются все хендлы и уничтожаются все объекты, чьи хендлы были в единственном варианте в данном процессе (+ см. мою подпись)
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    не очищать - это как насрать в унитаз и не смыть за собой... уважай свою операционную систему)))))
     
  10. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Очищать перед ExitProcess это все равно, что почистить унитаз ершиком от гавна перед тем как смыть его.
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    int2e
    VirtualAlloc тебе не нужен.
     
  12. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    jaja
    скорее наоборот :)
     
  13. _tmp17628

    _tmp17628 New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    144
    int2e
    Сборщик мусора. В дотнетоподобных языках применяется для зачистки гуан в самопроизвольные моменты времени, замораживая при этом основное приложение. Использовать его не надо :)

    При завершении процесса все выделенные им ресурсы автоматически освобождаются, хендлы закрываются (кроме хендлов обьектов ядра, если они заюзались другим процессом).
    Но освобождать ресурсы (память) и закрывать хендлы стоит все же вручную, потому что это тру :)
     
  14. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    мсдн
    так что можно нифига не освобождать :)
     
  15. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Спасибо, капитан!
     
  16. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Ага, MSDN не врет, а винда - идеальна :)
     
  17. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    kero в данном конкретном случае да :) не веришь - проверь.
     
  18. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    А в динамически подгружаемых библиотеках, тоже можно ничего не освобождать?
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну адресное пространство процесса ведь одно. И дллки же тоже внутри них
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    dgs
    Ну все тоже самое, только осторожно с shared-секциями данных, которые могут быть использованы как-нибудь другими процессами.