IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Помогите разобраться с Pascal'ем, странное поведение процедуры
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Вот код программы
Код

{$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. Сорри, если не в тот раздел запостил.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Откуда взялись эти цифры?
Мусор, который хранится в стеке... При выделении памяти под ГЛОБАЛЬНЫЕ переменные она заполняется нулями (по крайней мере должна заполняться), а вот с локальными - все по другому: размещаются они в стеке, и при этом память не заполняется ничем... то есть, что было - то и осталось... Вот так и получается, что при инициализации переменной pp в памяти на ее месте было какое-то значение, которое, будучи рассмотрено как 16-битовое число (Integer), представляет собой число 320 в 10-ной системе счисления...

Почему значения разные в обоих случаях? Так ведь разные ключи компиляции... Особенно должен влиять ключ {$A+}: выравнивание данных на границу слова, при этом как раз возможно смещение той области памяти, в которой размещается PP (С выравниванием адрес переменной P будет четным, без него - может быть нечетным)...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.11.2020 1:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name