Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];

Вниз

Недоиспользование динамических типов в Дельфи?   Найти похожие ветки 

 
KSergey ©   (2009-03-04 17:04) [80]

> It"s not me   (04.03.09 16:56) [78]
> вот видишь как оно. Я тоже этого не знал, но подозревал,  что что-то такое есть. И для тебя ветка стала полезной.

Бесполезной.
Я заглядывал в профайлер. Мне хватило, написанное же - оно про блох.


 
Сергей М. ©   (2009-03-04 17:23) [81]


> память что освобождается, что выделяется в модуле kernell dll - согласен?


А кто говорит о системной куче ?

Мы тут вообще-то о менеджерах более высокого уровня, с которыми непосредственно взаимодействуют рантайм-библиотеки различных языковых сред разработки).. С твоей, кстати, подачи)


 
It's not me   (2009-03-04 17:58) [82]


> Я заглядывал в профайлер. Мне хватило

заглядывал ты после поста: Григорьев Антон ©   (04.03.09 15:41) [72] .
И этот пост был в данной ветке. не было бы ветки - не было бы поста Антона. Не было бы поста Антона - не полез бы ты в профайлер, не узнал бы эту особенность динамических массивов. Прямо как маленькому... Впрочем, доказывать тебе, что ветка оказалась полезной для тебя - бред, конечно... Можешь даже делать вид, что знал все это изначально - мне уже пофигу...


> А кто говорит о системной куче ?
>
> Мы тут вообще-то о менеджерах более высокого уровня, с которыми
> непосредственно взаимодействуют рантайм-библиотеки различных
> языковых сред разработки).. С твоей, кстати, подачи)

что-то я потерял нить дискуссии... А причем тут системная куча?

Вот ход, поправь если не согласен:

1) я сказал, что так никто не делает. В смысле того, что не делается так, что память выделяется в одном модуле, а высвобождается в другом.

Для сего процесса нужно соглашение о том, какие WinApi функции использовать для выделения / освобождения памяти, чтобы не возникло фигни. Я не видел таких соглашений, ибо разные модули могут быть написаны на разных языках со своими менеджерами памяти, которыми в 90% случаев и пользуются, а потому обеспечить нативную совместимость невозможно.

2) ты сказал, что так делают и привел в пример FormatMessage из кернела

3) я тебе сообщил, что пример некорректен. Ты не освобождает память самостоятельно, ты один фиг должен вызвать LocalFree, таким образом передав управление опять модулю кернела и именно ТАМ освобождается память.

Точно также можно было бы привести пример: socket / closesocket - и утверждать, что память, допустим, освобождается в твоем модуле. Но это не так, память под сокет один фиг и выделяется и освобождается в ДРУГОМ модуле, просто по твоей комманде.

Но я прекрасно понимаю, что тут бесконечное поле для флуда, ибо в пример приведена системная DLL, в которой в частности и происходит "настоящее" высвобождение и выделение памяти по командам VirtualAlloc, HeapAlloc и прочие, к которым в любом случае обращаются все собственные менеджеры памяти.

Настоящим так сказать примером я бы считал такой пример, когда какой-то модуль выделил бы память исключительно виндовыми средствами напрямую без использования сторонник несовместимых менеджеров памяти. И данную структуру бы передавал / возвращал стороннему модулю с соглашением, что сторонний модуль должен высвободить память опять же стандартными средствами windows исключительно (ибо ТОЛЬКО ТАК возможна полная совместимость выделения / освобождения памяти в приложениях, написанных на разных ЯВУ). И вот такого я действительно нигде не видел, ни в готовых модулях DLL, ни в самой винде, нигде.

В каком модуле выделяется память, в таком она и освобождается потом. Просто по разному реализован момент определения освобождения, можно по выгрузке модуля, можно по таймеру, можно до следующего вызова подобной функции, можно по комманде извне. Но никогда модуль извне непосредственно память не освобождает.


 
oxffff ©   (2009-03-04 18:35) [83]


> It"s not me   (04.03.09 17:58) [82]
>
> > Я заглядывал в профайлер. Мне хватило
>
> заглядывал ты после поста: Григорьев Антон ©   (04.03.09
> 15:41) [72] .
> И этот пост был в данной ветке. не было бы ветки - не было
> бы поста Антона. Не было бы поста Антона - не полез бы ты
> в профайлер, не узнал бы эту особенность динамических массивов.
> ..


А это мягко говоря камень к разработчикам. Последовательное обращение по указателю на статический массив он оптимизирует, а последовательное обращение к элементам динамического массива нет. Так что есть куда оптимизировать. Проверял на D7.


 
Eraser ©   (2009-03-04 18:56) [84]

> [82] It"s not me   (04.03.09 17:58)


> Настоящим так сказать примером я бы считал такой пример,
> когда какой-то модуль выделил бы память исключительно виндовыми
> средствами напрямую без использования сторонник несовместимых
> менеджеров памяти. И данную структуру бы передавал / возвращал
> стороннему модулю с соглашением, что сторонний модуль должен
> высвободить память опять же стандартными средствами windows
> исключительно (ибо ТОЛЬКО ТАК возможна полная совместимость
> выделения / освобождения памяти в приложениях, написанных
> на разных ЯВУ). И вот такого я действительно нигде не видел,
> ни в готовых модулях DLL, ни в самой винде, нигде.

в winAPI есть примеры, подтверждающих обратное. например при работе с SecurityDescriptor"ами некоторые функции сами выделяют память, которую потом нужно оснобождать самому через LocalFree.
при работе с некоторыми WTS функциями тоже память выделяется внутри модулей, а освобождается из приложения.
это только из того, что сразу вспомнилось.


 
It's not me   (2009-03-04 19:23) [85]


>  winAPI есть примеры, подтверждающих обратное. например
> при работе с SecurityDescriptor"ами некоторые функции сами
> выделяют память, которую потом нужно оснобождать самому
> через LocalFree


то есть, существуют функции (вызываемые НЕ ИЗ кернела), которые что-то создают, что потом приходится освобождать это через LocalFree?

Можно название этой функции хотя бы одной?


 
clickmaker ©   (2009-03-04 19:30) [86]

использование kernel32.dll программами "чисто на апи" - примерно то же самое, что и использования borlndmm.dll VCL-приложениями, если они хотят кидать блоки памяти друг другу. В частности, строки и массивы.
Только borlndmm.dll предоставляет более высокий уровень абстракции от вирутальной памяти, к которой все в итоге сводится.


 
Eraser ©   (2009-03-04 19:31) [87]

ConvertStringSecurityDescriptorToSecurityDescriptor, ConvertStringSidToSid и т.д.


 
clickmaker ©   (2009-03-04 19:32) [88]

> ConvertStringSecurityDescriptorToSecurityDescriptor

длина впечатляет -)


 
It's not me   (2009-03-04 19:36) [89]


> ConvertStringSecurityDescriptorToSecurityDescriptor, ConvertStringSidToSid
> и т.д.

действительно, есть такие функции. Честное слово, не встречал )
Это, видимо, более современный подход. Мне кажется, что в WinApi, которые описаны в хелпе от D7 ни одной такой функции не найдешь. Я так думаю.


 
Eraser ©   (2009-03-04 19:38) [90]

> [89] It"s not me   (04.03.09 19:36)

дескриптор безопасности, полученный с пом. довольно древней функции InitializeSecurityDescriptor, после использования тоже нужно освобождать через LocalFree кстати.


 
test ©   (2009-03-04 19:49) [91]

я понял про какой развод говорил Ega32, он сюда учиться пришел, возможно пишет доклад по теме))


 
It's not me   (2009-03-04 19:58) [92]

ну если под разводом понимать мои попытки больше узнать про программирование, то да, извините, господа, но это чистой воды развод.


 
Eraser ©   (2009-03-04 20:14) [93]

кстати насчет InitializeSecurityDescriptor погорячился что-то, туда надо передавать уже выделенный фрагмент памяти, хотя вроде память должна быть правильно выделена именно с пом. LocalAlloc (кстати какой-то API или интерфейс, если не подводит память, возвращает уже готовый SD, который нужно освобождать именно через LocalFree, когда то сталкивался с такой проблемой). Но зато довольно часто-используемая функция AllocateAndInitializeSid тоже ипользует именно обсуждаемый здесь подход.


 
Eraser ©   (2009-03-04 20:16) [94]

+ SetEntriesInAcl


 
test ©   (2009-03-04 20:24) [95]

Eraser ©   (04.03.09 20:14) [93]
Если мне не изменяет память GetDC еще так работает.


 
Eraser ©   (2009-03-04 22:29) [96]

> [95] test ©   (04.03.09 20:24)

возможно в военное время )


 
Jack128_   (2009-03-05 10:31) [97]


> oxffff ©   (04.03.09 18:35) [83]

Оффтоп, Сергей, не подскажешь ссылку на свой блог ? Ты там сорцы выкладывал любопытные??


 
oxffff ©   (2009-03-05 11:18) [98]


> Jack128_   (05.03.09 10:31) [97]


http://santonov.blogspot.com/


 
oxffff ©   (2009-03-05 11:32) [99]


> Jack128_   (05.03.09 10:31) [97]


Можешь меня в Wiki найти. :)))
См. coroutine.



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.009 c
10-1156333737
Bnd
2006-08-23 15:48
2009.05.10
компонент prOpcKit


2-1238336247
dis12345
2009-03-29 18:17
2009.05.10
проблема с календарем


10-1153747700
Calibr2
2006-07-24 17:28
2009.05.10
Как связать OleVariant с CorelDRAW?


2-1238434818
yammi
2009-03-30 21:40
2009.05.10
Чем заменить сишный Return в дельфи?


2-1237963003
Coming
2009-03-25 09:36
2009.05.10
Не понятная ситуация с копированием файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский