![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Максимальное значение разности двух Pointer`ов.
LightRipple © (2008-06-01 16:57:00)Здравствуйте !
Может ли "в реальной жизни" разность двух Pointer`ов не уместиться в integer ?
(разность нам важна со знаком)
Суть в следующем: есть чужая структура с изменяемым размером.
Есть в ней "лишнее" поле ULONG. Вот туда я и хочу запихать эту разность :)
Ум_ще (2008-06-01 17:34:00) [21]
> Anatoly Podgoretsky © (01.06.08 17:27) [10]
> > LightRipple (01.06.2008 17:23:06) [6]Pointer это не
> Integer, а Cardinal (DWord)
Анатолий, в каком модуле это определение?
Sha (2008-06-01 17:31:00) [22]> LightRipple © (01.06.08 16:57)
> разность нам важна со знаком
Процессор для 32-битового сложения и вычитания использует
одни и те же команды. Есть знак или нет знака - это только в
твоем воображении.
Поэтому если для 32-битовых чисел A=B-C, то всегда будет B=A+C.
И для знаковых и для беззнаковх. Все нормально поместится.
Только на переполнение и на знак не обращай внимания :)
LightRipple (2008-06-01 17:28:00) [23]> [8] Ум_ще (01.06.08 17:25)
> +вспомни, что Delphi не может работать с указателями,превышающими 2Гб памяти
А "другие" умеют ?
Anatoly Podgoretsky (2008-06-01 17:27:00) [24]> LightRipple (01.06.2008 17:23:06) [6]
Pointer это не Integer, а Cardinal (DWord)
Anatoly Podgoretsky (2008-06-01 17:26:00) [25]> LightRipple (01.06.2008 16:57:00) [0]
Не может 4 gb(23bit) - 0 = 4 gb, аналогично для 64 бит
Ум_ще (2008-06-01 17:25:00) [26]+вспомни, что Delphi не может работать с указателями,превышающими 2Гб памяти
Ум_ще (2008-06-01 17:23:00) [27]
> Т.е. DWord(Pointer) не может быть больше MAXINT. Так ?
Не так.
Разность не может быть больше.
LightRipple (2008-06-01 17:23:00) [28]> [5] Ум_ще (01.06.08 17:13)
Т.е. DWord(Pointer) не может быть больше MAXINT. Так ?
Ум_ще (2008-06-01 17:13:00) [29]
> двух Pointer`ов не уместиться в integer ?
Каким образом?
Абсолютное значение (Long)-(Long) не может быть более Abs(Int)
LightRipple (2008-06-01 17:12:00) [30]> [2] SergeyIT (01.06.08 17:05)
> Да. ULONG <> integer.
Это я знаю. Потому и спросила: "в реальной жизни".
LightRipple (2008-06-01 17:10:00) [31]> [1] Amoeba © (01.06.08 17:02)
> А на кой она нужна?
Бывает полезна, когда мы не хотим каждый раз вызывать функцию
для получения адреса, а хотим иметь готовый указатель :)
SergeyIT (2008-06-01 17:05:00) [32]
> Может ли "в реальной жизни" разность двух Pointer`ов не уместиться в integer ?
Да. ULONG <> integer.
Amoeba (2008-06-01 17:02:00) [33]
> разность двух Pointer`ов
А на кой она нужна?