Четверг, 14 Ноября 2024, 10:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Вопрос-Ответ (С)
SaiteiДата: Понедельник, 20 Апреля 2015, 21:39 | Сообщение # 1
старожил
Сейчас нет на сайте
Здесь задаем вопросы и пытаемся ответить на существующие по языку программирования С.

Если у вас возник вопрос по языку программирования С++, то вы можете задать его здесь.
VuvkДата: Четверг, 03 Августа 2017, 11:49 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
Я просто сравнил нормальный выровненный вариант, который сотворил компилятор с вариантом, если выставить выравнивание в 1 байт.
Цитата

[a000 bbbb]
vs
[abbb b] - выделил позицию байта, если к b обратиться так же, как в первом варианте

Цитата
когда мне нужно выделить память под структуру размером 5 байт, то функция вернет адрес свободной зоны в которую структура может поместиться, в нашем случае - это 16, собственно после этого зона становится не свободной

и после этого оставшиеся 11 байт будут болтаться пустыми и бесхозными? Что-то как-то подозрительно. Пойду дальше учить мат.часть.

Цитата
Не на современных машинах, а компилятор их так представляет, с таким же успехом в другом яп нулевой указатель может быть предствлен в виде более сложной структуры.

Цитата
1.14: Ну а если честно, на какой-нибудь реальной машине используются ненулевые внутренние представления нулевых указателей или разные представления для указателей разных типов?

и в ответ какой-то раритет.
А насчет других ЯП - бог с ними, я же о Си толкую.


Сообщение отредактировал Vuvk - Четверг, 03 Августа 2017, 11:55
XakepДата: Четверг, 03 Августа 2017, 12:18 | Сообщение # 22
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Vuvk ()
и после этого оставшиеся 11 байт будут болтаться пустыми и бесхозными?

именно так - это называется внутренняя фрагментация памяти, можно просто использовать зоны более меньших размеров, чтобы более плотно ложилось все, я привер пример как можно реализовать, есть еще FreeList аллокаторы, но это простейшие примеры, соверменные менеджеры памяти сложнее устроены, к примеру вариант который я описал очень быстрый в плане выделения и освобождения, и в принципе внешняя фрагментация памяти вообще отсутствует (см. картинку). Часто используют такой способ, который я описал выше, для выделения маленьких объектов, для выделения чего-то по крупнее используют деревья или пирамды или еще что-то, но тут может возникнуть внешняя фрагментация памяти, когда у тебя вроде бы место есть, но выделить ты туда ничего не можешь, чтобы уменьшить фрагментацию как раз можно использовать выше описанный способ (так же известен как Pool Allocation) для выделения маленьких объектов, в статье про альтернативные аллокаторы памяти, который я приводил выше, немного рассказывают про это.


Сообщение отредактировал Xakep - Четверг, 03 Августа 2017, 12:22
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг