Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/28: Рейтинг темы: голосов - 28, средняя оценка - 4.93
2 / 2 / 1
Регистрация: 08.03.2008
Сообщений: 82
1

Динамическое выделение памяти

12.08.2008, 07:26. Показов 5238. Ответов 3
Метки нет (Все метки)

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

В заголовке находятся:
-длина блока в параграфах (2 байта),
-сегментный адрес предыдущего блока (2 байта),
-далее идут данные. Адрес начала данных и возвращается функциями ДРП.
Т.е. блок выделяемой памяти должен быть кратен параграфу?
Проверяю это на следующем коде
C++
1
2
3
4
5
6
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 нет?
------------------------------------------------------
Жду Вашего профессионального мнения .
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2008, 07:26
Ответы с готовыми решениями:

Правильное динамическое выделение памяти.
помогите пожалуйста, спасете человек 6... Преподаватель спросил как сделать программу без этого...

Динамическое выделение памяти под строку
Проблема в том, что при выделении памяти под строку temp->data.other, происходит изменение...

Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде...

Динамическое распределение памяти
void __fastcall TForm1::Button1Click(TObject *Sender) { int const col = StrToInt(Edit1->Text);...

3
Эксперт С++
2921 / 1270 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
12.08.2008, 10:37 2
"Источник" устарел на пару ледниковых периодов Сегментированная модель памяти была актуальна в эпоху MSDOS (BC++ 3.1). Под Win32 забудь про "сегменты". Все Win32 приложения используют плоскую несегментированную модель памяти flat, в ней тебе возвращается просто линейный адрес блока.
1
295 / 55 / 5
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 11:44 3
Хм...всегда считал целесообразным использовать new и delete в C++ для динамического выделения. Вы обрисуйте словами что надо выделить.
0
2 / 2 / 1
Регистрация: 08.03.2008
Сообщений: 82
12.08.2008, 18:34  [ТС] 4
Очень благодарен за ответы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2008, 18:34

Выделение памяти
Пишу программу в C++ Borland Builder 6. Если пытаюсь выделить сколь угодно много памяти с помощью...

Выделение динамической памяти
Задан граф в виде матрицы смежности вершин. Найти число компонент связности в этом графе....

Как использовать динамическое выделение памяти для новых массивов фиксированного размера?
как использовать динамическое выделение памяти для новых массивов фиксированного размера?

Выделение памяти
MyClass& DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы к переменной можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.