OberonCore
https://forum.oberoncore.ru/

Есть ли описание структур рантайма BB?
https://forum.oberoncore.ru/viewtopic.php?f=1&t=5140
Страница 1 из 1

Автор:  ilovb [ Четверг, 29 Май, 2014 12:27 ]
Заголовок сообщения:  Есть ли описание структур рантайма BB?

Интересует описание как в приложении к репорту Oberon 2.
Такое ощущение, что видел, но не помню где.

В частности на данный момент интересуют указатели на массивы.
Не могу понять почему не удается напрямую сконвертить POINTER TO ARRAY OF SHORTCHAR в сишный безтеговый char*.

Автор:  ilovb [ Четверг, 29 Май, 2014 14:13 ]
Заголовок сообщения:  Re: Есть ли описание структур рантайма BB?

На всякий случай, я это уже победил с помощью конвертации адреса, взятого от разыменованного поинтера.
SYSTEM.VAL(C.PtrChar, SYSTEM.ADR(ptr^))

Меня интересует почему не работает так:
SYSTEM.VAL(C.PtrChar, ptr)

Т.е., грубо говоря, почему SYSTEM.ADR(ptr^) # ptr ?

Автор:  Иван Денисов [ Четверг, 29 Май, 2014 16:02 ]
Заголовок сообщения:  Re: Есть ли описание структур рантайма BB?

Надо так вроде SYSTEM.ADR(ptr[0])

На сколько я помню, это связано с тем, что есть какая-то служебная информация еще о массиве по адресу указателя, а сам массив немного позже в куче лежит.

Автор:  ilovb [ Четверг, 29 Май, 2014 16:35 ]
Заголовок сообщения:  Re: Есть ли описание структур рантайма BB?

Точно. Спасибо.

А по поводу служебной информации... ну я так и понял. Вот и хотелось бы знать как оно устроено, чтоб не гулять по граблям.

Да и вообще надо бы документик написать о всех этих особенностях, чтобы было подспорье в биндинге.

Автор:  Илья Ермаков [ Пятница, 30 Май, 2014 09:40 ]
Заголовок сообщения:  Re: Есть ли описание структур рантайма BB?

Оберонкор-Вики-Дополнительная документация.

http://oberoncore.ru/library/ermakov_vn ... ejs_kernel

Там раздел "Диспетчер памяти", как раз и про дин. массивы, их заголовки описано.

Автор:  ilovb [ Пятница, 30 Май, 2014 10:59 ]
Заголовок сообщения:  Re: Есть ли описание структур рантайма BB?

Спасибо. Вот я слепой. :|
Смотрел же там, но не обратил внимание на:
Цитата:
Для массивов вводятся следующие поля:

Или, возможно, просто не уловил связь с:
Цитата:
начиная со смещения 0


Значит адрес массива = SYSTEM.ADR(ptr) + 3*4
Теперь все прояснилось :)

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