LINUX.ORG.RU

История изменений

Исправление 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* и т.п. но как-то изящнее такое решение казалось. И таки, если не учитывать оптимизацию, экономит лишнее место на стеке.