The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз набора компиляторов LLVM 8.0, opennews (?), 20-Мрт-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


8. "Релиз набора компиляторов LLVM 8.0"  –3 +/
Сообщение от Аноним (8), 21-Мрт-19, 09:29 
> VLA

Полезная штука, кстати. Жаль, что нет в стандарте ISO C.

Ответить | Правка | Наверх | Cообщить модератору

9. "Релиз набора компиляторов LLVM 8.0"  +4 +/
Сообщение от петявася (?), 21-Мрт-19, 10:26 
Внезапно они есть с C99, плюс в C11 немного поставили.
Ответить | Правка | Наверх | Cообщить модератору

12. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Аноним (12), 21-Мрт-19, 10:51 
Отвратительная штука ибо ты не можешь отследить выделилась память или нет и тупо сваливаешься на переполнении стека
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

13. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Аноним (13), 21-Мрт-19, 11:22 
Его это не волнует.
Ответить | Правка | Наверх | Cообщить модератору

14. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Cradle (?), 21-Мрт-19, 12:31 
иногда волнует, но также порой волнует потеря циклов 16-мгц контроллера на выделение и освобождение кучи когда на стеке место гарантировано есть. Так что лучше когда есть выбор.
Ответить | Правка | Наверх | Cообщить модератору

15. "Релиз набора компиляторов LLVM 8.0"  +2 +/
Сообщение от Аноним (13), 21-Мрт-19, 12:43 
> иногда волнует, но также порой волнует потеря циклов 16-мгц контроллера на выделение
> и освобождение кучи когда на стеке место гарантировано есть. Так что
> лучше когда есть выбор.

Вот и меня волнует. А того не волнует, он ведь "не можешь отследить..."

Ответить | Правка | Наверх | Cообщить модератору

18. "Релиз набора компиляторов LLVM 8.0"  +1 +/
Сообщение от Ordu (ok), 21-Мрт-19, 16:20 
Если ты статически уверен, что памяти на стеке достаточно, значит ты статически знаешь сколько там есть и сколько тебе надо. То есть ты посчитал максимальный размер того, что тебе надо, и убедился в том, что этот максимальный размер возможно выделить. Ну так выдели максимальный, в чём проблема-то?
Твоему 16MHz процессору это может даже приятнее будет, поскольку это может уменьшить количество динамической возни с указателем стека.
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

23. "Релиз набора компиляторов LLVM 8.0"  +2 +/
Сообщение от Урри (?), 22-Мрт-19, 09:44 
А что, в любой программе существует только одна функция с однократным вызовом?

Блин, а я потом удивляюсь - почему это браузеры жрут всю доступную память?

Ответить | Правка | Наверх | Cообщить модератору

26. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Cradle (?), 22-Мрт-19, 13:01 
в embedded это еще возможно отследить (и очень желательно), в браузере точно уже нет.
Ответить | Правка | Наверх | Cообщить модератору

27. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Cradle (?), 22-Мрт-19, 13:03 
> с однократным вызовом

не то что с однократным, но нужно следить на каких уровнях вложенности она вызывается и сколько стека для нее осталось  

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

29. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Ordu (ok), 22-Мрт-19, 15:48 
> А что, в любой программе существует только одна функция с однократным вызовом?

Если у тебя для нескольких функций достаточно памяти на стеке, то ты ведь для них тоже для всех посчитал, сколько каждая из них выделит максимально? И в сумме получилось меньше стека?

Или ты выяснил, что когда первая функция на стеке выделяет много, все остальные выделяют мало и в сумме всегда выходит меньше стека? Тебе реально приходилось сталкиваться с таким случаем на практике? Расскажи об этом, действительно ведь интересно.

> Блин, а я потом удивляюсь - почему это браузеры жрут всю доступную
> память?

Да, ещё и ядро тоже. Они тоже отказались от объектов динамических размеров на стеке. Глубина рекурсии у них по жизни должна была просчитываться статически,

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

30. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Cradle (?), 22-Мрт-19, 16:13 
да все понятно что тут аргументов больше против чем за и большой риск нарваться, а за использование vla в сразу нескольких вложенных функциях на разных уровнях я бы тоже по рукам бил больно. С другой стороны, вот например MISRA вносит целую кучу запретов, понятных и не очень, а потом люди встречаются и думают: "а если мы в нашей функции alloca используем, станет ругаться или не заметит?"
Ответить | Правка | Наверх | Cообщить модератору

31. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Ordu (ok), 22-Мрт-19, 19:19 
А зачем использовать alloca? Если уж совсем никак не уйти от динамического размера, а куча слишком медленная, то можно же сделать специализированный аллокатор под такого рода вещи.
Ответить | Правка | Наверх | Cообщить модератору

25. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Cradle (?), 22-Мрт-19, 12:57 
> Ну так выдели максимальный

на самом деле чаще всего так и делаем, хотя не красиво как-то.

Вообще дискуссия не прекращается на эту тему: https://stackoverflow.com/questions/12407754/what-technical-... , http://c-faq.com/malloc/alloca.glb.html

Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

16. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Аноним (16), 21-Мрт-19, 12:44 
Без VLA происходит то же самое.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

17. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Аноним (16), 21-Мрт-19, 12:52 
Другое дело, что если использоется VLA или alloca, особенно внутри if или цикла, то компилятору труднее оптимизировать, ибо Stack Pointer в пределах функции уже не постоянная величина, и надо либо генерить код, которые учитывает изменения Stack Pointer, либо таки использовать регистр под Frame Pointer, а не под что-то более полезное.
Ответить | Правка | Наверх | Cообщить модератору

33. "Релиз набора компиляторов LLVM 8.0"  +1 +/
Сообщение от adolfus (ok), 25-Мрт-19, 11:41 
На 64-разрядной архитектуре стек и куча используют одно и то же логическое адресное пространство, поэтому без разницы, где вы будете выделять память, в стеке или в куче -- если память исчерпывается, она исчерпывается как для стека, так и для кучи. А выделять локальную память в стеке быстрее и удобнее.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

20. "Релиз набора компиляторов LLVM 8.0"  +/
Сообщение от Аноним (20), 21-Мрт-19, 18:54 
Вообще да, но для ядра опасненько.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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