Кто-нибудь знает как ардуино выделяет память под vtable?
- Войдите на сайт для отправки комментариев
Пт, 28/02/2020 - 21:36
Заметил, что очередной virtual сожрал сразу 38 байт. При этом, класс еще даже не имеет наследников.
Эксперименты показали, что virtual в разных схожих ситуациях отъедает весьма разный объем SRAM.
Такое ощущение, что размер vtable растет скачками.
По моим прикидкам, в принципе, каждый virtual должен кушать по 2 байта на метод базового и каждого его наследника. Реальность совсем какая-то иная.
Ардуино тут не при делах.
Никто не идеален - напишите лучше.
Ардуино тут не при делах.
ну, понятно, что вопрос к gcc в итоге
А нам-то Вы это зачем сказали? Чтобы донести до нас эту информацию? Или просто захотелось поплакаться в жилетку и повыть на Луну?
Ардуино тут не при делах.
ну, понятно, что вопрос к gcc в итоге
Так отключите ему оптимизацию - картина будет другой.
Так отключите ему оптимизацию - картина будет другой.
не палите контору и не разрушайте розовый, идилический мир ТС :-)
Так отключите ему оптимизацию - картина будет другой.
Что-то я непонял. Тогда прога будет в 3 раза больше чем у ардуино progmem.
Так отключите ему оптимизацию - картина будет другой.
Что-то я непонял. Тогда прога будет в 3 раза больше чем у ардуино progmem.
И что? Вам нужно было, чтобы всё было предсказуемо - Вы это получили.
Там какая-то более глубинная проблема. Поначалу же все было гладко: по 2 байта на каждый виртуал. А тут – шарах 38, причем не за что. У класса ведь еще нет детей, а прирост в гору - как за 18.
Тогда, очевидно, Вам придётся погружаться в алгоритмы оптимизации gcc.
Алгоритмы оптимизации gcc тут, думаю, ни при чем. Все должно быть четко.
Фермер, как используется класс с этим виртуальным мембером? Сколько экземпляров?
Алгоритмы оптимизации gcc тут, думаю, ни при чем. Все должно быть четко.
Ну, почему, если не создавать ни одного экземпляра и нигде ни разу не обращаться к статическим членам, то класс просто будет выброшен из кода целиком. Дописываешь, дописываешь, а код всё не растёт, а потом ... ой, насколько сразу код увеличился. Тоже касается и отдельных частей класса.
jarduino,
это как бы массив 3*3
я про рост sram говорил, а не progmem, вообще-то
vtable сидит в sram