The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Google представил открытый стек OpenSK для создания криптогр..."
Отправлено Аноним, 02-Фев-20 16:30 
>> Нет.
> Да. Можно делать выделение памяти без выделения памяти. Еще один баянный метод проверить что будет - сделать бесконечную рекурсию.

Нет. Для начала, определитесь: выделять или не выделять, потому что ранее вы сами же писали о "выделение памяти под массивы переменного размера в рантайме."
Повторю еще раз, для экспертов выделения без выделения и прочей диалектики: unconstrained массивы в Аде - не аналог VLA.

> Кстати с последним вышел облом, я это под cortex M запилил, мне
> было интересно посмотреть как вообще сработает кастомный обработчик hardfault. А оно хренась и не падает?! Оказывается GCC шибко умный, заинлайнил все, на
> выделение стэка забил. Так что микроконтроль с мизером памяти наворачивает себе бесконечную рекурсию. Сюрприз!

Очень интересно (нет) и познавательно (тоже на самом деле нет) - вы открыли для себя новые грани современной оптимизации компиляторами для бесконечной рекурсии и сделали вывод что "налог VLA" в Аду работает так же  грабельно как и в GCC?

Еще раз, для экспертов по интересному смотрению: unconstrained массивы в Аде - не аналог VLA.

>> Ну вот то - выделение памяти под массивы переменного размера в рантайме.
>> например, из внешнего параметра формируемого фиг знает как,
> А на сях можно и не выделять.

Так выделять или не выделять?

> Ну вон на том мк вообще *alloc и free нету.

Это прекрасно, но непонятные претензии были к Аде (потому что аноним решил, что фичи там должны быть реализованны так же, как в GCC)

Т.е. по вашему, реализация ады все равно вставит заглушки для выделения памяти и будет крешится или где?
Это не так:
http://docs.adacore.com/live/wave/gnat_ccg/html/gnatccg_ug/g...
> Dynamic Memory Handling
> The use of dynamic memory (access types, aka pointers) is supported by the
> GNAT Pro CCG compiler, and will generate calls to the standard C functions
> malloc() (for memory allocation) and free() (for deallocation). If dynamic
> memory is used in the Ada sources, then malloc() and possibly free() need to
> be provided by the C compiler.

Идем далее - я так понял, тут был спры^W кейс сильно урезанного рантайма. Что ж:

https://docs.adacore.com/gnathie_ug-docs/html/gnathie_ug/gna...


No_Allocators,  -- This restriction ensures at compile time that there are no occurrences of an allocator.
No_Implicit_Heap_Allocations,            -- (RM D.8(8), H.4(3))
No_Implicit_Loops,  
No_Protected_Type_Allocators,  


5.1.13. No_Anonymous_Allocators
[RM H.4] This restriction ensures at compile time that there are no occurrences of an allocator of anonymous access type.

Или это был намек, что Адисты не Сишники, а значит – по умолчанию глупые и недалекие люди и не знают, где и как у них там выделяется память?
Позвольте и тут усомниться.

>> Так что парой нехитрых действий можно поиметь грабель покруче сишников.
> И единственный способ таким манером пятку себе подстрелить - как раз поюзать VLA из C99. И собственно одна из причин по которой их не советуют - надежность снижают.

Давайте без очередного спрыга с темы и самонахваливания, просто пречислите эти самые грабли в Аде.


>> Это тут ключевое.
> Ну вы то как эксперт в управлении памятью нам ща урок грамотности дадите? :)

Хотя вы, как известный эксперт по необоснованным заявлениям, ценному мнению и дартаньянствованию, с последующим спрыгам с темы, уже соломки подстелили, приплетя тут МК и "вообще *alloc и free нету", так и быть:
https://docs.adacore.com/gnat_ugx-docs/html/gnat_ugx/gnat_ug...
> The Secondary Stack
> GNAT returns objects from functions via registers (if small) or via the
> primary stack. For the latter, the caller of the function typically
> allocates space for the return object on its primary stack before the call.
> However, Ada allows functions to return objects of unconstrained types, for
> example unbounded array types such as String, and unconstrained
> discriminated record types
>  In this case the caller does not know the size of the returned object at the point of the call.
> To resolve this problem, GNAT provides each task with a secondary stack that objects of unconstrained types are returned on. On native and cross targets using the full run-time, the secondary stack by default is allocated dynamically on the heap.

Надеюсь, что такое "using full run-time" и каковы последствия, объяснять не надо?
На всякий случай, цитирую еще из возможных опций урезания рантайма:

https://docs.adacore.com/gnat_rm-docs/html/gnat_rm/gnat_rm/s...
>  No_Secondary_Stack
> [GNAT] This restriction ensures at compile time that the generated code does
> not contain any reference to the secondary stack. The secondary stack is
> used to implement functions returning unconstrained objects (arrays or
> records) on some targets
. Suppresses the allocation of secondary stacks for
> tasks (excluding the environment task) at run time.

Все еще с нетерпением ждем список граблей "круче и неочевидней" сишных.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру