На какой объем памяти ссылается указатель

Juve
Дата: 03.06.2009 13:24:00
Здравствуйте!

var vaBufIn: pChar;
...
  getMem(vaBufIn,10);
  ...
  freeMem(vaBufIn);

1.Правильно ли я понимаю, что freeMem освободит все 10, ранее выделенных, байт. Если так, то где (в указателе?) хранится информация об объеме динамически выделенной памяти и, можно ли её получить.

2.Если в результате ряда операций над указателем, он оказался смещен на неизвестное количество позиций, можно ли принудительно вернуть текущую позицию на начало?

3.Уже из любопытства ) Можно ли узнать физический адрес ячейки, на которую ссылается указатель?

Как явствует из вопросов, с указателями раньше дела не имел, извините если очень глупые вопросы задаю.

Спасибо.
Dimitry Sibiryakov
Дата: 03.06.2009 13:43:10

Да, освободит 10 байт. Размер хранится в служебной записи по
отрицательному смещению. За подробностями - в исходники менеджера памяти
RTL. Получить можно, но не советую - как и любая другая
недокументированная структура она может измениться в любой момент.
Если изменить указатель, то угадать его оригинальное значение
практически невозможно.

Posted via ActualForum NNTP Server 1.4

Зайцев Фёдор
Дата: 03.06.2009 13:53:30
Juve

3.Уже из любопытства ) Можно ли узнать физический адрес ячейки, на которую ссылается указатель?
у виртуальной памяти нет физических адресов
OracleLover
Дата: 03.06.2009 13:54:34
Dimitry Sibiryakov

Да, освободит 10 байт. Размер хранится в служебной записи по
отрицательному смещению. За подробностями - в исходники менеджера памяти
RTL. Получить можно, но не советую - как и любая другая
недокументированная структура она может измениться в любой момент.
Если изменить указатель, то угадать его оригинальное значение
практически невозможно.


Принцип различается для разных ОС?
Dimitry Sibiryakov
Дата: 03.06.2009 13:57:34

OracleLover
Принцип различается для разных ОС?

Delphi работает только под одной ОСью.

Posted via ActualForum NNTP Server 1.4

Juve
Дата: 03.06.2009 14:05:44
Dimitry Sibiryakov, большое спасибо! Некоторое понимание пришло.
OracleLover
Дата: 03.06.2009 14:18:49
Dimitry Sibiryakov

OracleLover
Принцип различается для разных ОС?

Delphi работает только под одной ОСью.


я имею ввиду 98, 2000, Xp и т.д - но из вашего ответа стало ясно что нет.
Barmaley57
Дата: 03.06.2009 14:27:55
Зайцев Фёдор
Juve

3.Уже из любопытства ) Можно ли узнать физический адрес ячейки, на которую ссылается указатель?
у виртуальной памяти нет физических адресов


Подробнее можно. А то люди могут не так понять :)
Зайцев Фёдор
Дата: 03.06.2009 14:41:04
Barmaley57
Зайцев Фёдор
Juve

3.Уже из любопытства ) Можно ли узнать физический адрес ячейки, на которую ссылается указатель?
у виртуальной памяти нет физических адресов


Подробнее можно. А то люди могут не так понять :)

Можно. Сразу после определения физического адреса.
Dimitry Sibiryakov
Дата: 03.06.2009 14:45:54

OracleLover
я имею ввиду 98, 2000, Xp и т.д

В данном случае речь идёт о дельфийском менеджере памяти, который не
зависит от вышеперечисленного и получает от ОСи память (очень) большими
кусками, которые уже потом "унутре" дробит. В нём ещё есть связный
список свободных кусков, их дефрагментатор и куча прочего барахла, к
которому я и посылал в исходники RTL.

Posted via ActualForum NNTP Server 1.4