важность освобождения памяти? [дубликат]

Не очень быстро для больших списков, но достаточно:

rotate :: Int -> [a] -> [a]
rotate n xs = iterate rot xs !! n
  where
    rot xs = last xs : init xs

Например:

> rotate 2 ["#","@","#","#"]
["#","#","#","@"]
5
задан Community 23 May 2017 в 10:30
поделиться

5 ответов

Когда ваша программа завершится, вся память будет освобождена операционной системой.

Причина, по которой вы должны освободить ее самостоятельно, заключается в том, что память - это ограниченный ресурс в вашей запущенной программе. Конечно, в очень коротких простых программах отказ освободить память не будет иметь заметного эффекта. Однако в долго работающих программах неспособность освободить память означает, что вы будете потреблять ограниченный ресурс, не пополняя его. В конце концов он закончится, и ваша программа выйдет из строя. Вот почему вы должны освободить память.

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

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

6
ответ дан 18 December 2019 в 07:56
поделиться

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

8
ответ дан 18 December 2019 в 07:56
поделиться

На настольных ОС, таких как Windows, Linux или MacOS, ваша память будет очищен для вас.

В некоторых операционных системах реального времени или встроенных операционных системах он не будет очищен для вас.

Но это ' Хорошая идея всегда освобождать память, когда вы закончили с ней - помните, что пока ваша программа работает, вся эта память все еще используется. Если вы не освободите его, использование памяти на машине увеличится.

Вы также должны быть осторожны с рефакторингом - скажем, вы начинаете писать функцию main () , которая выделяет некоторую память , и вы не беспокоитесь о его освобождении, потому что ОС сделает это за вас. Но затем вы переносите этот код в функцию, которая вызывается много раз в течение длительного периода времени - внезапно возникает огромная утечка памяти.

Вы также должны быть осторожны с рефакторингом - скажем, вы начинаете писать функцию main () , которая выделяет некоторую память, и вы не беспокоитесь об ее освобождении, потому что ОС сделает это за вас . Но затем вы переносите этот код в функцию, которая вызывается много раз в течение длительного периода времени - внезапно возникает огромная утечка памяти.

Вы также должны быть осторожны с рефакторингом - скажем, вы начинаете писать функцию main () , которая выделяет некоторую память, и вы не беспокоитесь об ее освобождении, потому что ОС сделает это за вас . Но затем вы переносите этот код в функцию, которая вызывается много раз в течение длительного периода времени - внезапно возникает огромная утечка памяти.

5
ответ дан 18 December 2019 в 07:56
поделиться

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

Более проблематично: 1) если это происходит в цикле, ваша программа раздувается в размере и 2) в C ++, если ваши «новые» объекты ed не «удаляют» d, ваши деструкторы не запускаются, и это может привести к гораздо более серьезным проблемам ( утечка мьютекса или утечка ресурсов, НЕ очищенных ОС, проблемы с целостностью данных, список можно продолжить)

1
ответ дан 18 December 2019 в 07:56
поделиться

Важно правильно освободить память, чтобы инструменты, помогающие найти утечки памяти, давали значимый результат, когда и если вам нужно отследить проблемы. Разрешение ОС освободить для вас память добавит дополнительных шумов любым аналитическим инструментам, которые вы можете использовать позже. Даже если ОС вернет память системе, у вас должна быть надежная конструкция, которая правильно использует память и позволяет наилучшим образом использовать инструменты.

0
ответ дан 18 December 2019 в 07:56
поделиться