Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамически распределяемая память

24K
12 августа 2008 года
warobushek
32 / / 10.08.2008
В одном источнике прочитал следующее
Цитата:

При каждом обращении к памяти выделяется непрерывный блок, состоящий из одного или нескольких параграфов. В первом параграфе имеется заголовок блока. При освобождении памяти блок помечается как свободный. Таким образом, в процессе работы программы свободные и занятые блоки начинают чередоваться. В результате увеличивается фрагментация кучи, когда общей свободной памяти много, а непрерывного блока необходимой длины нет.
Выделяемый блок памяти имеет вид
2
2
14
16
…..
16

В заголовке находятся:
-длина блока в параграфах (2 байта),
-сегментный адрес предыдущего блока (2 байта),
-далее идут данные. Адрес начала данных и возвращается функциями ДРП.



Т.е. блок выделяемой памяти должен быть кратен параграфу?
Проверяю это на следующем коде

 
Код:
main(){
char *block1=(char *)malloc(100);
char *block2=(char *)malloc(110);
char *block3=(char *)malloc(120);
free(block2);
}


Результат в BC 6.0 ++
block1==008F:4B38
block2==008F:4BA0
block3==008F:4C14

block2-block1==104
block3-block2==116
Результат в BC 3.1 ++
block1==913B:0004
block2==9142:0004
block3==914A:0004

block2-block1==112 байт
block3-block2==128 байт

------------------------------------------------------
получается что в 3.1. выделяется кратно параграфу, а в 6.0 нет?
------------------------------------------------------
Жду Вашего профессионального мнения .
8.8K
12 августа 2008 года
Se AD WMD
165 / / 10.01.2007
Параграф - это 16 последовательных байт в памяти, адрес первого из которых кратен 16:
00000-0000F - первый параграф памяти
00010-0001F - второй параграф памяти
....
FFFF0-FFFFF - 65536-й параграф памяти

!но! Это справедливо только для доса, для винды параграф не имеет никакого значения, поэтому компиляторы для 3.1 билдера и 6.0 работают по разному.
24K
12 августа 2008 года
warobushek
32 / / 10.08.2008
Очень благодарен Вам за ответы
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог