powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Простейший менеджер памяти на базе VirtualAlloc
25 сообщений из 90, страница 3 из 4
Простейший менеджер памяти на базе VirtualAlloc
    #40136846
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal

а рабочий релиз нужен вотпрямщас


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



Fr0sT-Brutal

, . При этом падения с описанной частотой приемлемы.


А кто ж их спрашивать будет, эти падения - приемлемы они или нет? Программа падает и никого не спрашивает, приемлемо это или нет.

В последние дни вроде падать стало реже. Не знаю, благодаря моему менеджеру памяти, который выделяет память с запасом или благодаря включению в релизы Range Check Error и Overflow Check Error.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40136851
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
Справедливости ради, вполне возможно, что ресурсов фиксить баги нет, а рабочий релиз нужен вотпрямщас.

Угу, оно всегда так. Делать хорошо - ресурсов нет, а делать плохо, мучиться, переделывать и в итоге тратить в десять раз больше - они откуда-то находятся. И что самое забавное - в результате ресурсов никогда нет, потому что они всегда уходят на борьбу с ранее созданными хренями. И так продолжается до тех пор, пока результат просто волевым усилием не спускается в унитаз, и вместо него с нуля не делается такое же дерьмо, только на другой технологии. Часто теми же людьми - что, собственно, и обеспечивает "такое же дерьмо".
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40136861
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это использовать https://bitbucket.org/shadow_cs/delphi-leakcheck
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40136990
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014,

да у них не утечки, у них скорее всего доступ к убитым объектам по типу

Код: pascal
1.
2.
3.
Obj.Free;
...
Obj.a := 2;



SafeMM + EuricaLog например, как раз то, что доктор прописал
искать и править

ну и спич возникнет как всегда вокруг .Free-FreeAndNil()
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137003
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я когда искал утечки с помощью fastmm был вынужден делать freeandnil у объектов так как fastmm показывал утечку указателя, при том что сам объект был убит. так с тех пор и привык им пользоваться
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137007
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди> был вынужден делать freeandnil у объектов так как fastmm
энди> показывал утечку указателя, при том что сам объект был убит

Для обычных объектов или интерфейсов?
Обычно всякие чеккеры (в т.ч. в других ЯП
и средах, типа валгринд и пр.) работают по
парам Create-Free (ну или malloc-delete).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137012
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

они просто не знаю про FreeAndNil
хотя правды для: автопоинты другие костыли имеют

SafeMM жёстче работает, он просто память не освобождает, а доступы к ней все запрещает на уровне страниц
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137015
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
энди> был вынужден делать freeandnil у объектов так как fastmm
энди> показывал утечку указателя, при том что сам объект был убит

Для обычных объектов или интерфейсов?
Обычно всякие чеккеры (в т.ч. в других ЯП
и средах, типа валгринд и пр.) работают по
парам Create-Free (ну или malloc-delete).


обычные объекты, я вообще интерфейсами практически не пользуюсь
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137020
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)да у них не утечки, у них скорее всего доступ к убитым объектам по типу

Бери выше, у них рандомный доступ к памяти: 22437654
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137036
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди> обычные объекты

Это странно. AFAIU, это баг и если у тебя
воспроизводится на чистом проекте - вышли
им, пусть правят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137041
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

kealon(Ruslan)да у них не утечки, у них скорее всего доступ к убитым объектам по типу

Бери выше, у них рандомный доступ к памяти: 22437654


Этот злополучный модуль переписан. Глюков стало меньше. При включении Range Check Error еще меньше. Но к сожалению, глюков все еще много. Особенно в сборке, которая на XE8, прямо какой-то глюконат. На Delphi 2007 глюков меньше, но в последнее время и там почему-то стали чаще. Да, мы все еще продолжаем пилить проект на D2007, время от времени собирая на XE8.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137103
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
Гаджимурадов Рустам,

они просто не знаю про FreeAndNil
хотя правды для: автопоинты другие костыли имеют

SafeMM жёстче работает, он просто память не освобождает, а доступы к ней все запрещает на уровне страниц


Если код кривой, но давно работающий и в нем тупо переписать Free на FreeAndNil - пробовали. Но в этом случае иногда начинают вылезать баги, которых раньше не было (уже не помню пример кода - но такая ситуация была уже - когда срочно пришлось вернуть обратно Free). Так что если нет в планах рефакторить код - лучше не заменять просто так Free на FreeAndNil. А новый код, наверное, лучше писать с FreeAndNil.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137104
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Но в этом случае иногда начинают вылезать баги, которых раньше не было

Да-да Не было
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137123
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Наталья87
Но в этом случае иногда начинают вылезать баги, которых раньше не было

Да-да Не было


FreeAndNil - хрень полная, которая только вводит в заблуждение. Пример. Есть у нас класс

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
type
   TMyClass=class
      x: array of integer;
      constructor Create;
      destructor Destroy;
      destructor Free;
   end;

constructor TMyClass.Create;
begin
   setlength(x, 10);
   x[7] := 19;
end;

destructor TMyClass.Destroy;
begin
   ShowMessage('6');
   setlength(self.x, 0);
end;

destructor TMyClass.Free;
begin
   ShowMessage('5');
   setlength(self.x, 0);
end;





Вызываем код с Free:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var
   c: TMyClass;
begin
   c := TMyClass.Create;
   try
   finally
      c.Free;
   end;
end;



Срабатывает всё четко, выдает сообщение "5".



Теперь вызываем код с FreeAndNil:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var
   c: TMyClass;
begin
   c := TMyClass.Create;
   try
   finally
      FreeAndNil(c);
   end;
end;



Поведение программы меняется - теперь она вообще никаких сообщений не выдает. То есть получается, метод класса Free или Destroy не отрабатывает (а ведь в этих методах могут быть методы освобождения памяти объектов, созданных классом, а не освобождать это уже утечки памяти). И самое главное - поведение программы меняется. И где в первом варианте с Free были баги? Их действительно не было, но с заменой на FreeAndNil они появились (память не освободилась, а ведь там может быть не только динамический массив, но и сложный объект и т. д.)
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137124
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
FreeAndNil - хрень полная, которая только вводит в заблуждение.
у тебя ошибка сломалась.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137127
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137128
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, дошло. Во всем проекте я получается, неверно использую деструкторы. Надо писать c override .

Код: pascal
1.
2.
3.
4.
5.
TMyClass=class
   x: array of integer;
   constructor Create;
   destructor Destroy; override;
end;



Тогда и FreeAndNil будет нормально работать.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137129
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
FreeAndNil - хрень полная, которая только вводит в заблуждение.

Компьютер тоже - хрень полная. Займитесь чем-нибудь, что Вам по силам. Из соображений деликатности не буду приводить примеров, чем именно.

Наталья87
Пример. Есть у нас класс

Божечки Я, конечно, подозревал, какой код у вас в приложении, но я вас недооценил.

Наталья87
Поведение программы меняется - теперь она вообще никаких сообщений не выдает.

И причиной этому не детские ошибки, которые Вы ухитрились влепить в первых пяти строчках своего примера, а хреновый FreeAndNil Вы способны эти ошибки хотя бы найти или Вам помочь?

P.S. Способны. Ну.. уже плюс, конечно.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137133
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

Божечки Я, конечно, подозревал, какой код у вас в приложении, но я вас недооценил.


Да я теперь сама офигеваю, как 500 тысяч строк кода (рабочего, но написанного в таком стиле) переписывать, написанных за более, чем 10 лет, на правильный стиль. Похоже, надо было раньше придти к вам, пока проект был не таким большим.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137139
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87> 500 тысяч строк кода (рабочего, но
Наталья87> написанного в таком стиле) переписывать,
Наталья87> написанных за более, чем 10 лет

1. 500 тыщ это не так уж и много, тем паче за 10 лет.
2. Не "рабочего", а запускающегося и как-то работающего.
3. Кажется, я Вам уже говорил - не учитесь методом тыка.
Вы, кажется, тогда мне что-то огрызнулись. Нет, методом
проб и ошибок тоже можно, конечно, но сильно дольше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137148
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Кажется, дошло. Во всем проекте я получается, неверно использую деструкторы. Надо писать c override
Я, кажется, уже когда-то говорил, что не стоит игнорировать варнинги и хинты.
Все они обязаны быть исправлены.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137149
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Наталья87
Кажется, дошло. Во всем проекте я получается, неверно использую деструкторы. Надо писать c override
Я, кажется, уже когда-то говорил, что не стоит игнорировать варнинги и хинты.
Все они обязаны быть исправлены.


Надо, но все руки не доходят, но буду делать, тут вариантов не остается уже. У меня сейчас накопилось их в программе 2500 штук. Большинство глупые вроде "variable was declared, but never used" или "variable might not be initialized", хотя по коду четко видно, что переменная не может быть не инициализирована. Правда некоторые и по делу, но найди попробуй в такой куче, какие по делу, а какие просто так.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137156
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Надо, но все руки не доходят, но буду делать, тут вариантов не остается уже.

Если криво писать "потому что нужен релиз прямо сейчас", руки никогда не дойдут. Они так и будут вечно заняты копанием в куче не будем говорить чего.

Наталья87
У меня сейчас накопилось их в программе 2500 штук.

(Застрелился второй раз кряду). А я-то, помнится, с ужасом вспоминал, как в джуновские времена пинал своё руководство, пока не добился права исправить порядка пятисот штук, которые они наплодили в проекте. И как после этого вдруг исчезли пара десятков таинственных ошибок, которые всё не получалось исправить.

Наталья87
Большинство глупые вроде "variable was declared, but never used" или "variable might not be initialized", хотя по коду четко видно, что переменная не может быть не инициализирована. Правда некоторые и по делу, но найди попробуй в такой куче, какие по делу, а какие просто так.

Во-первых, они все по делу. Варнингов просто так в дельфе нет. Если совсем точно - я знаю только один, и я стопроцентно уверен, что у вас его не бывает. А во-вторых, не надо искать и разделять. Надо исправить все и держать по нулям. Строго и без вариантов.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137159
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
все руки не доходят
Руки не доходят до исправления ошибок? Ну, что тут скажешь.
...
Рейтинг: 0 / 0
Простейший менеджер памяти на базе VirtualAlloc
    #40137160
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Правда некоторые и по делу, но найди попробуй в такой куче, какие по делу, а какие просто так.
Очень просто. Сделать так, чтобы не было кучи. Чтобы не было ни одного. Начать с первого и закончить последним.
...
Рейтинг: 0 / 0
25 сообщений из 90, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Простейший менеджер памяти на базе VirtualAlloc
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]