Языки програмирования

Тема в разделе "WASM.HEAP", создана пользователем Blackbeam, 24 окт 2010.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Nafanya
    поставьте visual assist x
     
  2. Nafanya

    Nafanya Member

    Публикаций:
    0
    Booster
    <<Find and Replace. ^)
    Спасибо огромное! Очень выручили! Работает! А то чтоб одну переменную переименовать полчаса уходило, сейчас с Вашим методом за минуту!
     
  3. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Жжош.
    Вообще-то во всех редакторах такая функция есть. По крайней мере, текстовых.
    В любом случае, поздравляю. Теперь твоя работа сильно убыстрится)
     
  4. Nafanya

    Nafanya Member

    Публикаций:
    0
    Товарищи,есть здесь утечка памяти или нет? Не подскажите
    В коде:
    void foo()
    {
    Cluster *p = new Cluster;
    .......
    return;
    }
    при выходе p из области видимости, delete автоматом вызывается или руками надо?
     
  5. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Не, автоматом не вызывается. Нужно писать delete в том месте, где хочешь удалить.
    В таком случае:
    Код (Text):
    1. Claster claster;
    деструктор вызовется автоматически.
    А утечка есть, да.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Nafanya
    В С++ ручками нужно вызывать delete. Нифига себе программист пошёл. А как же книжки читать?
     
  7. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Или логически подумать. Ну вот создал ты объект в этой функции, а использовать будешь в другой. И как ты это сделаешь, если он удалится автоматически?
     
  8. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Использовать умные указатели.
    Либо возвращать по ссылке.
     
  9. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Booster
    Есть в этом доля правды. Многие концепции очень красиво могут быть реализованы на нём.
    Например, на LISP'e изначально был реализован GC в .NET, потому что на нём можно более чётко выразить семантику объектов в памяти. Потом уже переписали на С++.
     
  10. Nafanya

    Nafanya Member

    Публикаций:
    0
    Sasha7b9
    <<Не, автоматом не вызывается. Нужно писать delete в том месте, где хочешь удалить.

    Delete для локальной pcluster нельзя вроде ипользовать, возвращать функции будет нечего!

    Cluster Transformer::Get_Cluster()
    {
    list_iter=plist->begin();
    Cluster *pcluster=new Cluster;
    *pcluster=*list_iter;
    list_iter=plist->erase(list_iter);
    count--;
    return(*pcluster);
    }

    Нужно каким-то чудом вернуть кластер в main и при этом освободить в списке память которую он занимал. Я написал конструктор копий для объекта Кластер и возвращаю по значению локальный объект. Утекает ли память при каждом вызове функции под объект *pcluster? 10 вызовов и память объемом в 10 объектов кластер утекла или нет?

    Cluster Transformer::Get_Cluster()
    {
    list_iter=plist->begin();
    Cluster thecluster;
    thecluster=*list_iter;
    list_iter=plist->erase(list_iter);
    count--;
    return(thecluster);
    }
    А так наверное уже не утекает. Для thecluster - деструктор вызывается при выходе из видимости.
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx
    Экспериментируйте на здоровье - утекает, не утекает.
     
  12. artkar

    artkar New Member

    Публикаций:
    0
    Или C# :)
     
  13. Nafanya

    Nafanya Member

    Публикаций:
    0
    Спасибо за советы! Проверил диспетчером задач! При первом варианте при генерации миллиона кластеров около полгигабайта памяти утекает.
    При втором варианте приложение требует себе только 236 Кбайт памяти и также генерирует миллион кластеров. Утечек нет.
     
  14. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Конечно утекает, а что её делать? Этой строкой объект просто берётся по значению и копируется:

    Только в чём смысл выделять объект в динамической памяти, а потом использовать его как локальный в другой функции. Бред.

    Книгу читайте умную.
     
  15. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    NafanyaТы с терминологией ничего не напутал? Если каждый твой кластер занимает 512 байт памяти, то при создании млн. штук приложение возьмёт полгигабайта.
    А если берёт всего 236 кбайт, значит, где-то ошибка, разве нет?
     
  16. Nafanya

    Nafanya Member

    Публикаций:
    0
    Sasha7b9
    <<А если берёт всего 236 кбайт, значит, где-то ошибка, разве нет?
    Нет. Так как передали,допутим, 20 отсчетов преобразователю, он из них сформировал кластер и вернул его, затем на экран кластер вывели и память, что он занимал освободили. Затем следующие отсчёты идут пока кластер не сформируется. На проходе кластеризация идет.

    РЛС ведь без остановки крутится, памяти никакой не хватит, если все кластера хранить.
    Отработал один кластер, потом он не актуален, его можно удалять.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Nafanya
    все не все, но много хранить можно
    именно в случае рлс удаление будет глупостью большой. и времени возьмет, и с большой вероятностью к фрагментации приведет при длительной работе (рлс же долго должны непрерывно воркать)
     
  18. Nafanya

    Nafanya Member

    Публикаций:
    0
    qqwe
    <<именно в случае рлс удаление будет глупостью большой

    Я делаю так,как в ТЗ написано. ТЗ не я составляю.
    Оператор преобразует последовательность отсчетов по сложным алгоритмам в последовательность кластеров. Как только оператор сформирует кластер и выкинет его, больше он уже нигде не хранится.
     
  19. qqwe

    qqwe New Member

    Публикаций:
    0
    Nafanya
    а при чем тут ТЗ? это отсчеты не хранятся, а как это относится к работе с памятью? вот, например, что вы тут обсуждаете, если у вас в ТЗ есть настолько четкие указания, что вы можете делать строго по ним?

    впрочем, то дело ваше. лепите тупо. индусом больше, индусом меньше.
     
  20. Nafanya

    Nafanya Member

    Публикаций:
    0
    qqwe
    <<а при чем тут ТЗ?
    Если не выполниться хоть одно требование технического задания - покроют матом:) Ну на самом деле просто пошлют переделывать.
    <<как это относится к работе с памятью?
    Работа с памятью тут обязательна, т.к. отсчеты идут миллионами и если что не так пойдет оперативу скушает приложение моментально.
    Вот в результате обсуждения,сегодня нашел и искоренил одну утечку.