![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Dmitriy12345 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот код программы
Код {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+} {$M 16384,0,655360} program test; var i:integer; procedure ss; var pp:integer; begin writeln(pp); end; begin ss; readln(i); end. результат 320 Если убрать Код {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+} {$M 16384,0,655360} то результат 4941 Откуда взялись эти цифры? Помогите пожалуйста. P.S. Сорри, если не в тот раздел запостил. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Откуда взялись эти цифры? Мусор, который хранится в стеке... При выделении памяти под ГЛОБАЛЬНЫЕ переменные она заполняется нулями (по крайней мере должна заполняться), а вот с локальными - все по другому: размещаются они в стеке, и при этом память не заполняется ничем... то есть, что было - то и осталось... Вот так и получается, что при инициализации переменной pp в памяти на ее месте было какое-то значение, которое, будучи рассмотрено как 16-битовое число (Integer), представляет собой число 320 в 10-ной системе счисления...Почему значения разные в обоих случаях? Так ведь разные ключи компиляции... Особенно должен влиять ключ {$A+}: выравнивание данных на границу слова, при этом как раз возможно смещение той области памяти, в которой размещается PP (С выравниванием адрес переменной P будет четным, без него - может быть нечетным)... |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 23:20 |