OberonCore
https://forum.oberoncore.ru/

Kernel.Type
https://forum.oberoncore.ru/viewtopic.php?f=2&t=1250
Страница 1 из 1

Автор:  hothing [ Среда, 12 Ноябрь, 2008 20:42 ]
Заголовок сообщения:  Kernel.Type

Код:
Type = POINTER TO RECORD [untagged]
         size-: INTEGER;
         mod-: Module;
         id-: INTEGER;
         base-: ARRAY 16 OF Type;
         fields-: Directory;
         ptroffs-: ARRAY [b]1000000 [/b]OF INTEGER
      END;

Мне не показалось? Т.е. размер структуры около 2Мб? ЗАЧЕМ??? Может кто-то прояснить?

Автор:  Илья Ермаков [ Среда, 12 Ноябрь, 2008 21:01 ]
Заголовок сообщения:  Re: Kernel.Type

RECORD [untagged] - т.е. нет контроля границ. Используется только POINTER TO этот RECORD. Т.е. это просто способ работы с низкоуровневыми блоками переменного размера.

Автор:  hothing [ Среда, 12 Ноябрь, 2008 21:04 ]
Заголовок сообщения:  Re: Kernel.Type

Spasibo, Ilia!

Автор:  Info21 [ Четверг, 13 Ноябрь, 2008 06:59 ]
Заголовок сообщения:  Re: Kernel.Type

Илья Ермаков писал(а):
RECORD [untagged] - т.е. нет контроля границ. Используется только POINTER TO этот RECORD. Т.е. это просто способ работы с низкоуровневыми блоками переменного размера.

Стоп. Нет тэга записи. То есть это нельзя собирать сборщиком мусора.
А контроль границ как раз должен быть.

И размер тут, вроде, фиксированный.

untagged-записи используют, вроде, чтобы при передаче куда-нибудь во внешний мир скрытый тэг записи не мешался.

Автор:  Евгений Темиргалеев [ Четверг, 13 Ноябрь, 2008 09:30 ]
Заголовок сообщения:  Re: Kernel.Type

Действительно. [untagged] для записи не значит [untagged] для поля-массива.
Код:
MODULE TestIndex;

  IMPORT  SYSTEM;

  VAR
    rec: RECORD [untagged]
      y: ARRAY 20 OF REAL;
    END;

  PROCEDURE T*;
    VAR  i: INTEGER;
  BEGIN
    (*rec.y[30] := 2;*)
    i := 30; rec.y[i] := 2;
  END T;

END TestIndex.

^Q TestAsm.T

А большой размер массива, похоже и сделан, чтобы при "Используется только POINTER TO этот RECORD" хватило для блоков "любого" размера и контроль не ругался.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/