Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 11:38   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Память, указатели, теория

Предположим, что у нас есть строка String, длиной 16 символов.
Адрес указателя на строку - 0х045323
Я беру и прошу компьютер выделить мне кусок памяти GetMem.
Откуда компьютер знает, что нельзя брать адреса 0х045323 - 0х045333?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.09.2010, 11:43   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Из вики:
Цитата:
Для хранения данных о принадлежности памяти к занятой или свободной обычно используется дополнительная область памяти.
Пруф
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.09.2010, 11:48   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Т.е что-то типа
Код:

┌───────┐┌───────┐┌───────┐┌───────┐
│ DE    ││ AD    ││ BE    ││ EF    │ - значение
└───────┘└───────┘└───────┘└───────┘
    ↓        ↓        ↓        ↓
┌───────┐┌───────┐┌───────┐┌───────┐
│0х04533││0х04534││0х04535││0х04536│ - основная память
└───────┘└───────┘└───────┘└───────┘
    ↓        ↓        ↓        ↓
┌───────┐┌───────┐┌───────┐┌───────┐
│ занят ││ занят ││ пусто ││ пусто │ - дополнительная память
└───────┘└───────┘└───────┘└───────┘

?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 11.09.2010 в 12:00.
Alex Cones вне форума Ответить с цитированием
Старый 11.09.2010, 11:57   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Да, видимо так. Помнится, проводил опыт и выяснил, что после удаления объекта память не отчищается, а лишь помечается как свободная.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.09.2010, 12:01   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ясно, спасибо. Бредовая система.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.09.2010, 15:09   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

У вас есть лучшая?
p51x вне форума Ответить с цитированием
Старый 11.09.2010, 15:12   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Если бы я был в группе разработки Windows - придумал бы что-нибудь лучше, чем хавать память для того, чтобы работать с памятью. А сейчас приходится довольствоваться этим.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.09.2010, 16:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а при чём здесь Windows ?! Извините, но это дело ИСКЛЮЧИТЕЛЬНО компилятора!! Это он выделяет память, определяет какая из них свободная и т.д. и т.п.
Та же функция GetMem - обращение к borland'скому менеджеру памяти...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2010, 20:07   #9
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Подробное описание borland`овского менеджера памяти: http://www.rsdn.ru/article/Delphi/memmanager.xml

Но вообще, любому менеджеру памяти (будь то хоть системный, хоть компиляторный, хоть свой собственный,самописный) необходимо хранить информацию о выделенных блоках и/или же о блоках свободных. Разумеется, эта информация не может храниться "в воздухе", она тоже занимает некоторую память)

Конечно, если у тебя есть мысли по поводу того, как обойтись без этого, было бы интересно услышать)))
kogemrka вне форума Ответить с цитированием
Старый 11.09.2010, 20:15   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Хранить все данные подряд, отдельно храня только Integer указатель на первый свободный байт. При освобождении "внутреннего" участка памяти перемещать данные как при дефрагментации. Чтобы не сильно тормозить весь процесс использования ЭВМ - либо делать это в случае необходимости, "временно" оставляя "пробелы" - освобожденные куски памяти, еще не занятые ничем, либо разделить память на "блоки" - например $000000 - $400000, $400001 - $800000, $800001 - $B00000, $B00001 - $FFFFFF и хранить указатель отдельно для каждого блока.

Если мне дадут больше времени - я придумаю, как улучшить данный метод. Но это никому не нужно, потому, что система уже существует, пусть и не в самом оптимальном виде. Не мне её менять.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели. Динамическая память. Kazik Помощь студентам 2 18.01.2014 00:17
Указатели.Динамическая память Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 6 12.06.2010 10:08
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39
C,символы, указатели, динам.память ertar Общие вопросы C/C++ 6 24.12.2008 21:05