почему free () не уменьшает пространство данных программ [duplicate]

ИСТОРИЧЕСКАЯ МОТИВАЦИЯ: Существование не захватывающих групп можно объяснить с помощью скобок. Рассмотрим выражения (a | b) c и a | bc из-за приоритета конкатенации над |, эти выражения представляют собой два разных языка ({ac, bc} и {a, bc} соответственно). Тем не менее, скобки также используются в качестве сопоставимой группы (как объяснялось другими ответами ...).

Если вы хотите иметь скобки, но не захватывать подвыражение, вы используете NON-CAPTURING GROUPS. В этом примере (?: A | b) c

2
задан Pedro Alves 28 February 2013 в 17:31
поделиться

4 ответа

free не обязательно возвращает память в операционную систему. Чаще всего он просто возвращает эту область памяти в список свободных блоков. Эти свободные блоки могут быть повторно использованы для следующих вызовов malloc.

8
ответ дан Blagovest Buyukliev 27 August 2018 в 07:28
поделиться

Когда системная память будет фактически выпущена, зависит от ОС.

Пример Foe в Windows, даже если вы закрываете программу, память не будет выпущена одновременно. Он сделан для повторного использования при следующем запуске программы.

1
ответ дан Alex 27 August 2018 в 07:28
поделиться

free() просто сообщает распределителю, что ваша программа не нуждается в этом блоке . Распределитель может кэшировать его для дальнейшего выделения, или он может вернуть его системе, изменив указатель brk. Все зависит от реализации.

1
ответ дан phoeagon 27 August 2018 в 07:28
поделиться

Когда память распределена и позже свободен, эта память все еще остается с процессом, но отмечена как свободная, поэтому ее можно снова назначить. Это связано с тем, что в противном случае операционная система должна изменять отображение виртуальной памяти процесса каждый раз, когда вы вызываете malloc или free, что требует времени.

5
ответ дан Some programmer dude 27 August 2018 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: