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

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

12.08.2008, 07:26. Показов 5639. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2008, 07:26
Ответы с готовыми решениями:

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

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

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

3
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
12.08.2008, 10:37
"Источник" устарел на пару ледниковых периодов Сегментированная модель памяти была актуальна в эпоху MSDOS (BC++ 3.1). Под Win32 забудь про "сегменты". Все Win32 приложения используют плоскую несегментированную модель памяти flat, в ней тебе возвращается просто линейный адрес блока.
1
 Аватар для Spo1ler
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 11:44
Хм...всегда считал целесообразным использовать new и delete в C++ для динамического выделения. Вы обрисуйте словами что надо выделить.
0
 Аватар для warobushek
2 / 2 / 1
Регистрация: 08.03.2008
Сообщений: 82
12.08.2008, 18:34  [ТС]
Очень благодарен за ответы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2008, 18:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru