Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Память и потоки / 18 сообщений из 18, страница 1 из 1
15.10.2003, 11:13
    #32293760
Shev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Здравствуйте!

Есть поток №1, который выделяет память, заполняет ее некими данными и посылает событе с указателем на эту память другому потоку №2 этого же процесса. Вопрос: кому принадлежит выделенная память? И что произойдет с выделенной памятью если поток №1 завершиться, а второй поток продолжает работать? Уничтожится ли при этом память?

Также интересует: в стеке потока хранится выделенная память или только мой указатель на выделенную память?

Спасибо
...
Рейтинг: 0 / 0
15.10.2003, 13:36
    #32294044
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Могу кончено, ошибаться, но насколько я понимаю:
Shev писал:кому принадлежит выделенная память?
первому потоку
Shev писал:И что произойдет с выделенной памятью если поток №1 завершиться, а второй поток продолжает работать? Уничтожится ли при этом память?
Память уничтожится. Обращение к ней вызовет ошибку.
Shev писал:в стеке потока хранится выделенная память или только мой указатель на выделенную память?
не понял вопроса. в стеке вроде бы не хранится ни "выделенная память" ни указатель на неё. Если ты сам туда не поместишь.
...
Рейтинг: 0 / 0
16.10.2003, 05:04
    #32294758
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
m_kus
не соглашусь с тобой....

Shev
Итак, память принадлежит приложению, а еще точнее манагеру памяти. Но если потоки не в dll, то можно считать что приложению, а по сему любой поток убивает память выделенную в любом. память умерает сама тогда и только тогда, когда умрет приложение.

В стеке хранятся только локальные переменные адреса возвратов и при некоторых условиях функции. У каждого потока свой стек, а по сему с ним можно делать все тоже что и со стеком в однопоточнике, не заботясь о других потоках. Память выделяется глобальная, а по сему для доступа к ней необходимо применять средства синхронизации. Это могут бать Мьютексы, семафоры, критические секции и сигналы. В твоем случае я думаю стоит обратить внимание на класс TMultiReadExclusiveWriteSynchronizer. Он позволит разграничивать доступ к памяти очень удачно с минимальным временем простоя потоков. Не плохо будет и заглянуть в исходники класса, в них написано много интересного и правильного.
...
Рейтинг: 0 / 0
16.10.2003, 08:55
    #32294833
SiDen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Поддерживаю StarWind.
За одним исключением... к сожалению не всегда память очищается при закрытии приложения... :(
...
Рейтинг: 0 / 0
16.10.2003, 10:01
    #32294920
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
SiDen
Ладно, уточним :))
Это ДОЛЖНО быть :)) а если не так, то можно смело относить в разряд глюков операционки :)) Впрочем верно и другое утверждение, если прога после себя оставила в памяти мусор, то это очень нехорошо:)
...
Рейтинг: 0 / 0
16.10.2003, 10:31
    #32294962
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Народ!
Есть такая программа "MemProof". Она проверяет выделение и освобождение памяти программой. К сожалению работает только с Delphi и C++Builder и нужно правильно скомпилировать(поставить нужные для MemProof галочки в компиляторе и линкере).
Так вот если память выделяешь, то ее нужно освобождать и ни в коем случае не надеяться, что она освободиться сама. Это я проверял не однократно при помощи той самой "MemProof".
К сожалению, дистрибутива сейчас с собой нет, но насколько помню он небольшой, поэтому его можно скинуть по почте.
...
Рейтинг: 0 / 0
16.10.2003, 11:14
    #32295015
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Cauchy

если встретишь такую прогу за углом. направь чтоб ко мне зашла? :))
на мыло :)) Полюбопытствовать интересно Заодним может получится пронаблюдать культурная ли у меня прога :)
...
Рейтинг: 0 / 0
16.10.2003, 11:25
    #32295042
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
<<StarWind

Направлю. Завтра принесу болванку на которой записан дистрибутив и направлю.
Как бы не забыть...
...
Рейтинг: 0 / 0
16.10.2003, 11:26
    #32295043
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Cauchy
буду премного благодарен
...
Рейтинг: 0 / 0
16.10.2003, 11:32
    #32295059
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
я вот тут перечитал снова фразу
"в стеке потока хранится выделенная память или только мой указатель на выделенную память?"....
если постараться, то можно наверное всеж выделить память и в стеке...
просто сместить указатель стека на некоторое кол-во байт.... вот только позволит ли операционка... но с другой стороны почему и нет? ведь локальные переменные создаются таким же способом... так что вполне можно и в стеке выделить память. Вот только один недостаток проявляется сразу, по умолчанию в стеке всего один мег памяти на все про все... Но это и решается довольно просто... при создании потока можно указать размер памяти... вобщем возможно мысль будет интересна когда-нить
...
Рейтинг: 0 / 0
16.10.2003, 11:43
    #32295080
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
<<StarWind

Мыло у тебя написано в разделе "Информация"?
Я правильно понял?
Этож такая хитрая защита от спама...
...
Рейтинг: 0 / 0
16.10.2003, 11:45
    #32295085
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
совершенно верно
просто что-то реклама стройматериалив зачастила..... как-то это пока не входит в сферу моих интересов :))
...
Рейтинг: 0 / 0
16.10.2003, 13:58
    #32295322
Shev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Спасибо всем за ответы.

Я уже опытным путем исследовал эту проблему - все так как описал StarWind.
А по поводу MemProof, то я бы тоже не прочь обзавестись подобной программой (скиньте, please, на мыло).
Сейчас пишу небольшой сервер, который обрабатывает входящие запросы по сети. Там создается много всяких потоков, обменивающихся между собой данными. Очень хочется потестировать на утечки.
...
Рейтинг: 0 / 0
16.10.2003, 14:26
    #32295357
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
enjoy-те
memproof
...
Рейтинг: 0 / 0
16.10.2003, 14:59
    #32295430
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Спасибо, SergSuper

Скачал себе более свежую версию.
Что он не требует установки?
Тот MemProof, который у меня был, без установки тоже работал, но ничего не показывал.

<<StarWind и Shev
В принципе тут уже дали ссылку откуда скачать, так что присылать вам ничего уже не нужно. Хотя, если хотите, могу прислать свой "старый"
MemProof ( мне не жалко
).
...
Рейтинг: 0 / 0
17.10.2003, 03:24
    #32296044
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
Да нет, спасибо, скачал по ссылке :)
...
Рейтинг: 0 / 0
17.10.2003, 09:35
    #32296150
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
memproof c BCB6 будет работать?
...
Рейтинг: 0 / 0
17.10.2003, 10:29
    #32296249
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Память и потоки
У меня BCB6. "Старая" версия работала. Новую еще не пробовал.
Правда названия пунктов в компиляторе и линкере отличаются от тех которые написаны в хелпе MemProof-а, но можно понять по смыслу.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Память и потоки / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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