Отговори на тема  [ 18 мнения ]  Отиди на страница Предишна  1, 2
gcc stack usage 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 4195
Местоположение: Brussels / Пловдив
Мнение Re: gcc stack usage
Няма анализатор който да може да се оправи като хората с указатели към функции и от там нататък имаш два варианта:
- или не ползваш въобще указатели към функции (включително неявното им ползване като виртуални методи)
- или не анализираш дълбочината на стека

Вариантът в който анализираш само доколкото може пък където не може не анализираш не ми се струва особенно удачен.

Това с читавата система за мониторинг няма как да го избягаш защото ти хваща и куп други проблеми - забили нишки, препълване на стека, разни логически грешки които не бива да се случват (асерти и т.н.) т.е. все неща които няма как статично да ги анализираш. То като се замислиш там където може да се анализира самият компилатор го прави и ти оптимизира кода а там където не може всига ръце и не пипа, че да не омота нещо.

_________________
Мразя да мразя ...


Нед Сеп 02, 2018 10:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 1:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: gcc stack usage
Статичният анализ не е много далеч от halting теоремата, така че оптимизмът в тая посока не е оправдан.

Практичните подходи остават за runtime, както и palavrov казва. Ако имаше MMU лесно можеше да изолираш стековете от двете страни, ама подозирам че си с някое смотано ARM MPU, от което файда няма.

Огледай https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html за "-finstrument-functions" - да си сложиш викания на собствени профилиращи функции в пролога/епилога. Има и купчини проверки на тема стек и какво ли не, но ми изглеждат със съмнителна стойност.


Пон Сеп 03, 2018 10:02 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10370
Местоположение: Добрич
Мнение Re: gcc stack usage
Не, задачата е по-елементарна от halting теоремата. Пък е и факт че има статични анализатори. Сега съм малко отпуска и другата седмица ще поровя още...
За нуждите на стек анализа не е необходима 100% точност. Примерно честа ситуация с виртуалните методи е да се зареждат обекти от файл или от някъде отвън. Четеш типа и създаваш един или друг обект и му викаш load(). Статичният анализатор няма как да знае какви ще са данните, но него го интересува максималния стек, т.е. достатъчно е да се знаят всички класове и всички наследявания. А те се знаят в повечето компилатори, така че просто се взема варианта на load() дето яде най-много и толкоз. По-точно търси се се най-дългия път, но това са подробности.
Да, статичния анализ няма да е 100% точен, но грешката му е в презапасяването, т.е. ще сметни по-голям стек от нужното. Това обаче не е фатално, известен преразход на памет не ме притеснява, притеснява ме недостига ;-)
Иначе, да може да се напише код, който трудно би се анализирал... но сме му яли попарата и вече го избягваме тоя стил щото не само анализатора и ние се бъркаме и не можем да го поддържаме.


Пон Сеп 03, 2018 11:20 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 18 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни