История изменений
Исправление praseodim, (текущая версия) :
Ну и зачем нужен absolute кроме доступа к устройствам минуя ОС в реальном режиме или очень тонких оптимизаций в очень редких случаях - хз.
Ну я же говорю, для того, для чего и union. Кроме того, конкретно я absolute применял для работы с буфером данных, произвольного типа, передаваемом в функцию. Примерно так:
procedure (var buffer; length:integer)
var
a:array[0..0] of char absolute buffer;
begin
{$R-} //Чтобы отключить проверку границ
writeln(a[length-1]); //Напечатали последний символ.
//Предполагаем однобайтовую кодировку и sizeof(char)=1
{$R+}
end;
Понятно, что это можно сделать и не такими методами, есть void* и т.п. но как-то изящнее такое решение казалось. И таки, если не учитывать оптимизацию, экономит лишнее место на стеке.
Исправление praseodim, :
Ну и зачем нужен absolute кроме доступа к устройствам минуя ОС в реальном режиме или очень тонких оптимизаций в очень редких случаях - хз.
Ну я же говорю, для того, для чего и union. Кроме того, конкретно я absolute применял для работы с буфером данных, произвольного типа, передаваемом в функцию. Примерно так:
procedure (var buffer; length:integer)
var
a:array[0..0] of char absolute buffer;
sum:char;
begin
{$R-} //Чтобы отключить проверку границ
writeln(a[length-1]); //Напечатали последний символ.
//Предполагаем однобайтовую кодировку и sizeof(char)=1
{$R+}
end;
Понятно, что это можно сделать и не такими методами, есть void* и т.п. но как-то изящнее такое решение казалось. И таки, если не учитывать оптимизацию, экономит лишнее место на стеке.
Исходная версия praseodim, :
Ну и зачем нужен absolute кроме доступа к устройствам минуя ОС в реальном режиме или очень тонких оптимизаций в очень редких случаях - хз.
Ну я же говорю, для того, для чего и union. Кроме того, конкретно я absolute применял для работы с буфером данных, произвольного типа, передаваемом в функцию. Примерно так:
procedure (var buffer; length:integer)
var
a:array[0..0] of char absolute buffer;
sum:Int64;
begin
{$R-} //Чтобы отключить проверку границ
writeln(a[length-1]); //Напечатали последний символ.
{$R+}
end;
Понятно, что это можно сделать и не такими методами, есть void* и т.п. но как-то изящнее такое решение казалось. И таки, если не учитывать оптимизацию, экономит лишнее место на стеке.