Автор: 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 будет четным, без него - может быть нечетным)...