| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Выделение места в динамической памяти |
| Автор: pil69 31.3.2008, 01:55 | ||
Имеется код
Выполняю и через debug/watch проверяю значения p, p1, p2. Они равны, соответственно Ptr($4C34,$0) Ptr($4C34,$8) Ptr($4C35,$0) Меняю тип на ^Integer. Результат тот же. Другие типы также ситуацию не меняют. Лишь ^Extended дает Ptr($4C34,$0) Ptr($4C35,$0) Ptr($4C36,$0) Вопрос у меня возник такой. В динамической памяти ОС Windows выделяет место для разных типов одинакового размера по 8 байтов (кроме Extended), или же каждому типу по их "потребностям" (byte, shortint - 1 байт, integer - 2 байта и т.д.), но при этом появляются участки свободной памяти между переменными p, p1, p2? Между сегментами расстояние по 16 байт, хотя в учебниках утверждается, что должно быть 64 байта. У кого есть предположения по этому поводу? |
| Автор: Virtuals 31.3.2008, 20:08 |
| смотрите размер каждой переменной в помощьи, а так-же настройки компилятора по оптимизации, и ВЫРАВНИВАНИЮ переменных в памяти виндовс глубоко наплевать на типы данных паскаля, она о них не знает |
| Автор: MetalFan 1.4.2008, 13:17 |
используй для оформления кода кнопку "код"! |
| Автор: pil69 1.4.2008, 14:23 |
| В работе Габрельяна Б.В."Динамическое распределение памяти в MS Windows" (http://window.edu.ru/window/library?p_rid=45303) нашел раъяснение: "Семейство ОС MS Windows 9x/Me и, тем более, MS Windows NT/2000/XP поддерживают не сегментированную, "плоскую" модель памяти. Весь (виртуальный) адрес вырождается в смещение, но это смещение 4-х байтовое (32 двоичных разряда).". То есть Паскаль не совсем корректно отображает значения указателей. |
| Автор: Dobermann 1.4.2008, 17:06 | ||
| 1) Блин, парень кто тебя так учил работать с указателями......... Заданные тобой переменные - это указатели ссылающиеся на адреса ячеек памяти.
2) Хочешь чтобы не было расстояния между сигментами используй массив. и 3) не тупи с директивой! В состоянии $N+, компилятор генерирует код для выполнения всех вещественных вычислений с использованием математического сопроцессора 80x87 и дает вам доступ к четырем дополнительным вещественным типам: Single, Double, Extended и Comp |
| Автор: pil69 2.4.2008, 11:58 |
| А меня и интересовали указатели p, p1, p2, а не ссылочные переменные p^, p1^, p2^ (см. название темы) Директиву $N+ вставил для Extended |
| Автор: Dobermann 3.4.2008, 17:01 |
| Тогда чем тебя не устраивает вывод?!!! |