FreeMem

Общие вопросы программирования, алгоритмы и т.п.

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

Re: FreeMem

Сообщение Pavia » 24.03.2021 17:48:43

Seenkao писал(а):zub, нет ))), не это меня интересует. А именно по освобождению памяти от стоковых переменных. Есть где и что написано? На любом языке и на любом ЯП. )))


https://blogs.embarcadero.com/understan ... nting-arc/

https://ejudge.lksh.ru/lang_docs/fpc/ref.pdf
CHAPTER 3. TYPES

S2:=S1;
results in the reference count of S2 being decreased with 1, The reference count of S1is increasedby 1, and finally S1(as a pointer) is copied to S2. This is a significant speed-up in the code.If the reference count of a string reaches zero, then the memory occupied by the string is deallocated automatically, and the pointer is set to Nil, so no memory leaks arise. When an ansistring is declared, the Free Pascal compiler initially allocates just memory for a pointer,not more. This pointer is guaranteed to be Nil, meaning that the string is initially empty. This is truefor local and global ansistrings or ansistrings that are part of a structure (arrays, records or objects).This does introduce an overhead. For instance, declarin



http://docwiki.embarcadero.com/Librarie ... AnsiString
Because AnsiString variables have pointers, two or more of them can reference the same value without consuming additional memory. The compiler exploits this to conserve resources and execute assignments faster. Whenever an AnsiString variable is destroyed or assigned a new value, the reference count of the old AnsiString (the variable's previous value) is decremented and the reference count of the new value (if there is one) is incremented; if the reference count of a string reaches zero, its memory is deallocated. This process is called reference counting. When indexing is used to change the value of a single character in a string, a copy of the string is made if--but only if-- its reference count is greater than one. This is called copy-on-write semantics.


http://docwiki.embarcadero.com/RADStudi ... es_(Delphi)
Dynamic arrays are always integer-indexed, always starting from 0.

Dynamic-array variables are implicitly pointers and are managed by the same reference-counting technique used for long strings. To deallocate a dynamic array, assign nil to a variable that references the array or pass the variable to Finalize; either of these methods disposes of the array, provided there are no other references to it. Dynamic arrays are automatically released when their reference-count drops to zero. Dynamic arrays of length 0 have the value nil. Do not apply the dereference operator (^) to a dynamic-array variable or pass it to the New or Dispose procedure.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: FreeMem

Сообщение Seenkao » 24.03.2021 21:02:20

Pavia, благодарю!

Добавлено спустя 10 минут 7 секунд:
runewalsh писал(а):managed-типы
эм... неуправляемый тип? Почему тогда я управляю строками?

Задавался вопрос про то, что происходит внутри!

Изучал физику на уровне электронов-протонов? P-N, N-P, P-N-P, N-P-N - переходы?
Почитай книжку, там расписано всё как происходит, почему происходит запирание/отпирание переходов. Куда движутся электроны, за счёт чего не могут двигаться.

В книге всё доступно, только понять надо.

Я и задаю вопрос! Как это происходит в программе? Что делает компилятор, за счёт чего. Узнать более подробно что вообще происходит и почему надо что-то делать, или не надо это делать. Потому что это будет лишняя работа.

Что будет, если я сделаю это за компилятор вручную и тонны прочих вопросов, которые могут возникнуть, если нет ни какой информации, которая доступна для изучения. И ты пытаешься это всё изложить в письменном виде.

Может доклад сделаешь листов в 50? ))) Я почитаю и мне всё понятно будет... :oops:
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: FreeMem

Сообщение runewalsh » 24.03.2021 22:01:21

>неуправляемый тип? Почему тогда я управляю строками?
Не, ну ты серьёзно? Загугли «free pascal managed types».

Как прочитавший всего Ландау-Лифшица, аналогию с физикой не уловил. «Чётко и понятно» может быть в учебнике для 8 класса, но такие объяснения будут сказкой для ребёнка. К тому же программирование — формальная, а не естественная дисциплина, у них совершенно разные методологии.

>Задавался вопрос про то, что происходит внутри!
Давался ответ, что внутри происходят finally и Finalize(s), где Finalize(s) для строки — это if InterlockedDecrement(счётчик ссылок s) = 0 then FreeMem(блок памяти s). Какая из этих операций вызывает вопросы, и какие?

В разделе документации, который выдаёт гугл по запросу выше (3.9 Managed types), твоему вопросу посвящены аж 2 строчки, и не столько потому, что её всем лень писать, сколько потому, что вопрос реально тривиален и большего не заслуживает. Какие там 50 страниц.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Re: FreeMem

Сообщение Pavia » 25.03.2021 08:38:47

Seenkao писал(а):Задавался вопрос про то, что происходит внутри!

С этого надо было начинать вопрос. Программирование это не физика. Тут помимо документации есть бинарный-код программы и её листинг. Так вот до 30% знаний получаются путём изучения исходного кода и реверсом бинарников, отладкой, снифером. В физике такого нет.

Seenkao писал(а):Изучал физику на уровне электронов-протонов? P-N, N-P, P-N-P, N-P-N - переходы?
Почитай книжку, там расписано всё как происходит, почему происходит запирание/отпирание переходов. Куда движутся электроны, за счёт чего не могут двигаться.

Даже если Вы прочли школьный учебник по физике Вы не сможете объяснить как работает компьютер потому что в процессоре полевые транзисторы, а в учебники управляемые током. Вы даже не сможете ответить почему скорость распространения напряжения 300 тыс км/с а процессор едва ли работает на 5 Ггц.
runewalsh писал(а):Как прочитавший всего Ландау-Лифшица, аналогию с физикой не уловил.

ЛЛ это тоже сказачки, но только для взрослых людей.

Добавлено спустя 54 минуты 7 секунд:
Seenkao писал(а):Я и задаю вопрос! Как это происходит в программе? Что делает компилятор, за счёт чего. Узнать более подробно что вообще происходит и почему надо что-то делать, или не надо это делать. Потому что это будет лишняя работа.

Конкретно по строкам не попадалось. Надо искать специальную литературу по счетчикам ссылок. Что касается лишней работы оптимизатор должен убрать. Но фрии паскаль писали без теории. Тут просто открыть окно отладчика с дизассемблера и посмотреть.
Строки в Паскаль с динамическим выделением памяти, это значит что выделять и освобождать память не нужно. В редких случаях делаете SetLength он меняет длину. Память эта ф. тоже выделяет но это вторастепенная задача, хотя и немаловажная.

runewalsh писал(а):FreeMem(блок памяти s)

Про то как работает FreeMem можно тут прочитать:
http://www.interface.ru/home.asp?artId=5652
Про try except finally можете прочитать
https://wasm.in/blogs/win32-seh-iznutri-ch-1.398/
https://wasm.in/blogs/win32-seh-iznutri-ch-2.399/
https://wasm.in/blogs/win32-seh-iznutri-ch-3.400/
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: FreeMem

Сообщение runewalsh » 25.03.2021 09:33:43

Pavia писал(а):это тоже сказачки, но только для взрослых людей

То и другое — сказки, но это не означает их одинаковую сказочность. Тогда же, когда наткнулся на идиому «lie-to-children», вычитал и про wronger than wrong.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Re: FreeMem

Сообщение Seenkao » 25.03.2021 12:26:29

runewalsh, мы на разных языках разговариваем! )))

Pavia писал(а):Даже если Вы прочли школьный учебник по физике Вы не сможете объяснить как работает компьютер потому что в процессоре полевые транзисторы, а в учебники управляемые током. Вы даже не сможете ответить почему скорость распространения напряжения 300 тыс км/с а процессор едва ли работает на 5 Ггц.

Я знаю, примерно где что и как работает. И не по школьным учебникам. ))) Настолько глубоко в программу не собирался вдаваться... на это изучение можно потратить нынче всю жизнь.

Pavia писал(а):Конкретно по строкам не попадалось. Надо искать специальную литературу по счетчикам ссылок. Что касается лишней работы оптимизатор должен убрать. Но фрии паскаль писали без теории. Тут просто открыть окно отладчика с дизассемблера и посмотреть.
Строки в Паскаль с динамическим выделением памяти, это значит что выделять и освобождать память не нужно. В редких случаях делаете SetLength он меняет длину. Память эта ф. тоже выделяет но это вторастепенная задача, хотя и немаловажная.

Выше написанное тобой, примерно излагает суть. Но благодарю, видимо для полного пониманию в любом случае надо будет отслеживать что происходит.

Pavia писал(а):Про то как работает FreeMem можно тут прочитать:
http://www.interface.ru/home.asp?artId=5652

Я залазил внутрь FreeMem - уже знаю как работает. )))

За информацию отдельная благодарность!!!

runewalsh, и тебе тоже!!! Проскакивала полезная информация!!!

Добавлено спустя 1 минуту 29 секунд:
... нашёл всё.

обнаружение утечек памяти
пример обнаружения утечек

Странно... абсолютно всё чисто... как-то неправдоподобно...
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: FreeMem

Сообщение Seenkao » 11.05.2021 16:52:36

Нужон помощь...
Туплю в очередной раз. )))
Когда мы вызываем SetLength() - мы получаем "очищенные" данные или можем получить хлам в выделенных данных?

Добавлено спустя 1 час 12 минут 21 секунду:
https://www.freepascal.org/docs-html/rt ... ength.html - вопрос отпадает.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru