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/ |