ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Типизированная куча

Сообщений 1 страница 6 из 6

1

Для меня всегда оставалось загадкой, зачем объекты в куче разного размера.
Компилятор ведь знает размеры объектов, и вместо того, чтобы делать кучу для всех объектов,
можно было бы сделать много кучек для объектов каждого размера свою.

Мне кажется, что это позволило бы меньше двигать объекты.

Да, бывают такие объекты, навроде строк, у которых элементы это байты, для них специальная оптимизация уже выполнена.
Но почему это не сделано для других типов в системе типов?

Отредактировано Лис (2019-03-22 14:39:56)

0

2

Для меня всегда оставалось загадкой, зачем объекты в куче разного размера.

Напрямую к системной куче обращаются редко. Это просто основная системная функция.

можно было бы сделать много кучек для объектов каждого размера свою.

Чаще всего и берется массив изменяющегося размера (в С++ это std::vector из "стандартной библиотеки") либо память выделяется блоками и т.п.

Да, бывают такие объекты, навроде строк, у которых элементы это байты, для них специальная оптимизация уже выполнена.

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

Компилятор ведь знает

Разработчиков компиляторов не так уж и много, применяемых наук - еще меньше, в итоге там куча велосипедов и/или копипасты.

Отредактировано MihalNik (2019-03-22 15:54:26)

0

3

Лис написал(а):

можно было бы сделать много кучек для объектов каждого размера свою.

Оно так и есть. Delphi с 8 версии использует такой способ. Для предыдущих версий достаточно подключить FastMM.

Недостаток это наклодные расходы. Поэтому с определённого размера переключается на классической список свободных блоков.

0

4

Павиа написал(а):

FastMM

Судя по тому, что я про него прочитал, там всего две кучи - для мелких и средних объектов, а так же прямое выделение памяти для крупных.

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

0

5

Лис написал(а):

Адресное пространство большое, проблем никаких.

Сделай (хотябы на блок-схемах или в виде простого текстового описания), покажи как получилось. Пусть размер объекта может быть от 1 до 4095 байт.

Отредактировано atzx (2019-03-27 11:45:19)

0

6

Для малых объектов. Заводится свои массивы блоков.
Так вся проблема в освобождении если память не освобождать она быстро закончится. А что-бы освобождать надо хранить список свободных блоков.
Для ускорения можно вместо списка свободных блоков использовать структуру типа bin. С картой битовых флагов означающие свободен блок или нет.

https://www.cs.princeton.edu/courses/ar … emory2.pdf

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

0