Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];

Вниз

Значение BOOLEAN по умолчанию   Найти похожие ветки 

 
Андрей Сенченко   (2002-02-11 16:34) [0]

Заметил, что
var
a,b : boolean;
begin
// Если здесь проверить состояние a и b, то они оказываются false.
end.

Стало интересно: всегда ли это так и есть ли тому объяснения ?


 
Pete   (2002-02-11 16:42) [1]

По-моему все переменные по умолчанию равны 0. Стало быть false=0, true=1.

вроде бы можно сделать так:
a:boolean = true;


 
Юрий Зотов   (2002-02-11 16:43) [2]

По определению, false - это ноль, true - это все остальное (а практически - единица).

Если переменные глобальные, компилятор инициализирует их нулями, если локальные - то они нули только до первого вызова процедуры.

Выводы очевидны.


 
Иван Шихалев   (2002-02-11 16:44) [3]

Если a и b - глобальные переменные, то да. Хотя это и необязательно, но ОС, AFAIK, прошивает неинициализированные переменные нулями. А вот если это локальные переменные функции или процедуры, то это не так - что осталось в стеке, то и будет.


 
Иван Шихалев   (2002-02-11 16:46) [4]

Вот это синхронность! :)


 
Digitman   (2002-02-11 16:48) [5]

>Иван Шихалев
"Обнулением" будущих статических переменных заниматся компилятор.


 
Иван Шихалев   (2002-02-11 16:52) [6]

А разве они не в сегмент неинициализированных помещаются? BSS.


 
Digitman   (2002-02-11 18:22) [7]

Туда. Но компилятор вставляет неявный код инициализации BSS


 
Иван Шихалев   (2002-02-11 20:36) [8]

Понятно. Не знал...


 
Palmik   (2002-02-12 06:02) [9]

Кааароче по умолчанию - все BOOLEAN установлены как - FALSE!!!
И все тут :)))))
Серьезно.


 
PVOzerski   (2002-02-12 10:33) [10]

В связи с изложенным, смежный вопрос: а что лучше использовать, если есть выбор:
boolean или longbool? Вроде бы компиляторы D2-6 32-разрядные, естественна работа с
longbool, но в исходниках VCL везде boolean. И ладно, когда boolean - возвращаемое значение
функции (положил в EAX longbool, вынул из AL boolean), но ведь и в стек 1-байтовый boolean-
параметр кладут. Почему так (для сравнения: в Си для 32-разрядных платформ BOOL 32-битный)?


 
drpass   (2002-02-12 10:45) [11]

У boolean значения 0=false и 1=true (для совместимости с классическим Паскалем). В false он инициализируется автоматически конструктором класса и компилятором при запуске программы. Остальные типы данных (bytebool, longbool...) имеют 0=false и -1=true (для совместимости с Сями и т.д.)


 
PVOzerski   (2002-02-12 10:55) [12]

2drpass:
Это Вы правильно говорите, но я ведь не об этом спрашиваю, а о выравнивании


 
Digitman (M)   (2002-02-12 11:50) [13]

>PVOzerski
В Win32 в режиме PM в стек ВСЕГДА помещается DWORD !
Режим же виртуальной DOS-машины, думаю, мы здесь не рассматриваем, но и в этом режиме в стек помещается как минимум WORD


 
PVOzerski   (2002-02-12 12:44) [14]

Значит ли это, что в случае передачи параметров использование boolean ничем не хуже, чем longbool,
а реальная потеря качества оптимизации здесь возникает только в случаях массивов и packed record?
Или и там "тормозов" не возникает?


 
Digitman (M)   (2002-02-12 13:04) [15]

Да, значит. Достаточно указать правильное соглашение о вызове, а уж компилятор с оптимизатором сами разберутся, как реально и без потерь производительности (связанных с выравниванием) передать параметр типа Boolean. Исключением. првда, можно считать ситуации, когда вызываемый код не поддерживает напрямую булев тип (например, BLR-интерпретатор в IB-сервере) и интерпретация совместимых типов (например, smallint, integer) как булев тип возлагается на прикладную часть логики вызываемого кода (в случае с тем же IB - тело SP/триггера/View)

В случае использования, к примеру, array[..] of bytebool оптимизатор будет заботиться лишь о выравнивании массива на границу DWORD, нисколько не заботясь при этом об эффективности потенциальных обращений к элементам такого массива в run-time - сие уже отдается на откуп программеру. То же самое - о packed record



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
3-90484
Bormanoid
2002-02-03 18:08
2002.02.28
Создание динамического отчета в Делфи?


14-90660
TcP
2002-01-15 15:44
2002.02.28
API и Timer


3-90505
siapow
2002-02-04 19:08
2002.02.28
Как работать с БД Access


3-90518
СергейМНК
2002-02-04 06:15
2002.02.28
Как сделать чтобы выскакивал LoockUp список при начале набора текста в DBGrid в LoockUp поле


4-90704
Woron
2001-12-24 19:18
2002.02.28
Диалог OpenFolder





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский