Это сообщение, вдохновленное этим комментарием о том, как выделяется память для объектов в CPython. Первоначально это было в контексте создания списка и добавления к нему в цикле for с учетом понимания списка.
Итак, вот мои вопросы:
- сколько разных распределителей есть в CPython?
- Какова функция каждого из них?
- когда
malloc
называется acutally? (понимание списка может не привести к вызовуmalloc
, на основе того, что сказано в этом комментарии - Сколько памяти python выделяет для себя при запуске?
- Существуют ли правила, определяющие, какие структуры данных получают первые "dibs" в этой памяти?
- Что происходит с памятью, используемой объектом при ее удалении (python все еще удерживает память для выделения другому объекту в будущем или GC освобождает память для другого процесса, скажем, Google Chrome, для использования)?
- Когда запускается GC?
-
list
- это динамические массивы, что означает, что им нужна непрерывная часть памяти. Это означает, что если я попытаюсь добавить объект в список, чей базовый массив структуры C-данных не может быть расширен, массив копируется в другую часть памяти, где доступен более широкий непрерывный блок. Итак, сколько места выделяется этому массиву при инициализации списка?- сколько дополнительного места выделяется новому массиву, который теперь содержит старый список и добавленный объект?
EDIT. Из комментариев я понимаю, что здесь слишком много вопросов. Я только сделал это, потому что эти вопросы все очень связаны. Тем не менее, я был бы рад разделить это на несколько должностей, если это так (пожалуйста, дайте мне знать, чтобы сделать это в комментариях)