Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Помогите разобраться с Pascal'ем

Автор: Dmitriy12345 24.11.2006 5:55

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

Код

{$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 24.11.2006 6:06

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

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