LINUX.ORG.RU

История изменений

Исправление rezedent12, (текущая версия) :

то есть, если я пишу что-нибудь типа new Array(1,2,3), выделяется памяти больше чем нужно для этого массива? А как же он определяет, сколько памяти надо выделить?

Проблема порождена динамическим выделением памяти. Если ты заранее указываешь объём массива и делаешь его не изменяемым, то накладные расходы минимальны и почти одинаковы во всех языках. Однако если надо сделать многомерный динамический массив, массив массивов, массив объектов каждый из которых потребляет память динамически, то тут и начинаются проблемы. Кто то должен таскать в памяти данные так что бы память можно было использовать эффективно и при этом сохранять приемлемую скорость работы. То есть проще говоря бороться с фрагментацией. Частично эту задачу можно поручить менеджеру памяти операционной системы, запрашивая у него страницы по 4 килобайта. Но всё равно при опухании массива нужно обрабатывать его фрагментацию, либо дефрагментировать перемещая как его самого, так и другие данные (если память надо экономить).

Исходная версия rezedent12, :

то есть, если я пишу что-нибудь типа new Array(1,2,3), выделяется памяти больше чем нужно для этого массива? А как же он определяет, сколько памяти надо выделить?

Проблема порождена динамическим выделением памяти. Если ты заранее указываешь объём массива и делаешь его не изменяемым, то накладные расходы минимальны и почти одинаковы во всех языках. Однако если надо сделать многомерный динамический массив, массив массивов, массив объектов каждый из которых потребляет память динамически, то тут и начинаются проблемы. Кто то должен таскать в памяти данные так что бы память можно было использовать эффективно и при этом сохранять приемлемую скорость работы. То есть проще говоря бороться с фрагментацией. Частично эту задачу можно поручить менеджеру памяти операционной системы, запрашивая у него страницы по 4 килобайта. Но всё равно при опухании массива нужно обрабатывать его фрагментацию, либо дефрагментировать его перемещая как его самого, так и другие данные (если память надо экономить).