![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Seldon |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: нет Всего: 2 |
тут недавно обнаружил такую ситуацию:
в результате имеем мемори лик (проверял FastMM4) - этот самый стринг '123'. если же написать
то всё ok. в общем-то вполне ожидаемое поведение
но получаецца что он неправилен. можно конечно написать для каждого типа record'a свою процедуру, но как-то это нерационально. может можно как-то передать в процедуру ссылку на тип (ну вроде class of только для типа) чтобы сделать приведение указателя к нему? Это сообщение отредактировал(а) Seldon - 12.11.2006, 03:55 --------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||||
|
|||||||
| digs |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 14.10.2006 Репутация: нет Всего: 1 |
Я вижу три варинта:
1. Сделать вместо string везде string[255], но это ограничит размер строки 2. объявить все записи как class 3. Сделать в каждой записи первым поле, в которое будешь помещать код типа. Тогда просто пишешь вместо New и Dispose свои процедуры. New будет заполнять эти первые байты, а Dispose, анализировать их же и соответственно накладывать тип, чтобы корректно высводобить строки |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Всегда нас в университете учили в records писать стринги инициализированные. так что лучше писать:
-------------------- Ll 2 |
|||
|
||||
| Seldon |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: нет Всего: 2 |
1. не катит 2. вот к этому я уже сам пришёл, по почему-то не нравицца мне это решение 3. интересно, спасибо за интересную идею
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Это слишком подозрительно, работа с длинными строками в Delphi полностью автоматизирована, так что утечек памяти быть не должно, вероятно где-то еще имеется ссылки на эти строки. Как только число ссылок станет равным нулю память автоматически освободится. Не забывайте делфи многие операции оптимизирует дабы не грузить зря ни проц ни память. То что память осталось не освобожденной еще не значит, что про нее совсем "забыли". Такой совет, при работе со строками не следите за их памятью, многие уже достаточно "издевались" тестируя их на утечки , но все безрезультатно, строки работают как часы! -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| digs |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 14.10.2006 Репутация: нет Всего: 1 |
В этом случае строка представлена как в паскале. Т.е. не ссылкой, а как есть. Какова длина строки, настолько (плюс один байт) у тебя увеличивается структура. При распределении нужно только длину в ноль установить. Хотя, если ты сразу забиваешьш значения, то не нужно Это сообщение отредактировал(а) digs - 12.11.2006, 14:39 |
|||
|
||||
| Seldon |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: нет Всего: 2 |
код в моём первом посте, созданная строка больше нигде не используецца.
такой вопрос: в nt-based os каждое приложение имеет собственное адресное пространство и os после закрытия приложения всё равно вернёт себе всю занимавшуюся им память? т.е. лики просто увеличивают используемую во время работы приложения память? а после его завершения os всё себе вернёт?
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
| digs |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 14.10.2006 Репутация: нет Всего: 1 |
Я тут еще вспомнил про Object.
Можно его использовать, а не record. Скорее всего для него информация о строках сохраняется, и Dispose для него будет скорее всего кореектно отрабатываться. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
а че вместо своей структуры , не заюзать TStringList
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Seldon |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: нет Всего: 2 |
да, можно, но
1. мне это не нравицца по религиозным убуждениям. 2. хочу таки разобрацца с этим вопросом. потому что не все поля записи - string. например вот такая структура:
её можно легко сделать классом, и проблема исчезнет, но public поля класса вида Port:Integer; мне будут резать глаза и я сделаю
а это много лишнего кода, который затрудняет чтение и понимание. --------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:22 |
|||
|
||||
| Seldon |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: нет Всего: 2 |
и по сути вопроса: какие предложения по поводу разрешения моей ситуации? (см. вторую половину первого поста). кроме замены record на class. пока что одно предложение:
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |