Borland продал подразделение CodeGear компании Embarcadero T

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

FPC рулит, не вопрос. И рано или поздно обгонит Дельфю, если конечно те не займутся оптимизацией.:)

Sergei I. Gorelkin писал(а):Кроме того, в многопоточном приложении менеджер памяти FPC входит в критическую секцию только тогда, когда один поток пытается освободить память, выделенную другим потоком (что не есть большинство случаев).


Интересно как это сделано. Своя куча каждому потоку?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Mirage писал(а):Интересно как это сделано. Своя куча каждому потоку?


Если мне память не изменяет, список свободных блоков один на всех, а список выделенных - свой для каждого потока.
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Sergei I. Gorelkin писал(а):Если мне память не изменяет, список свободных блоков один на всех, а список выделенных - свой для каждого потока.


Тогда может быть коллизия при выделении.
Кстати, а что-то "своё" для потока как делается? threadvar? Так оно медленное вроде. Или у потока UID можно получить?
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

Mirage писал(а):Кстати, а что-то "своё" для потока как делается? threadvar? Так оно медленное вроде. Или у потока UID можно получить?

TLS? Теоретически содержимое threadvar можно запихнуть в стек потока. Но кажется мне что так не делается.....

И еще, если поток насильно прибить(вместе с TLS), получается что грохнется и менеджер памяти?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Скорость threadvar отличается на разных платформах, но в менеджере памяти число обращений к threadvar минимизировано, грубо говоря, одно выделение памяти - одно обращение к threadvar. Всяко должно быть не медленнее, чем вход/выход из критической секции + связанное try..finally.

Прибивание потока никак не влияет на менеджер памяти, да и как оно может повлиять? Запросов от прибитого потока больше не будет, и выделенная ему память просто останется висеть до окончания процесса.
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

Sergei I. Gorelkin писал(а):Скорость threadvar отличается на разных платформах, но в менеджере памяти число обращений к threadvar минимизировано, грубо говоря, одно выделение памяти - одно обращение к threadvar. Всяко должно быть не медленнее, чем вход/выход из критической секции + связанное try..finally.

Ну сдесь можно спорить... хотя не буду.... лучше поизучаю TLS :)

Sergei I. Gorelkin писал(а):Прибивание потока никак не влияет на менеджер памяти, да и как оно может повлиять? Запросов от прибитого потока больше не будет, и выделенная ему память просто останется висеть до окончания процесса.

А разве она не может освобождатся в другом потоке???


Чет мы разоффтопились :)))
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

*vmr писал(а):А разве она не может освобождатся в другом потоке???


Может, но при этом нет обращений к структурам выделявшего потока. Если освобождает не тот, кто выделял - прежний "владелец" освобождаемой памяти просто забывается, и память приписывается освобождающему потоку (естественно, это происходит в критической секции - мало ли чего...)

Вообще, исходные тексты - занятный материал для изучения :)
Ответить