|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
||||||||||||||||
Порядок вызова конструкторов23.04.2017, 10:04. Показов 3949. Ответов 27
Метки нет (Все метки)
Всем доброго дня.
Наткнулся в коде на интересные грабли: test.cpp
В коде я вижу, что сначала отрабатывают конструкторы классов, а потом конструктор структуры. Почему так происходит? Разве не должны выполняться конструкторы используемых объектов, а потом тех, что используют их. Можно ли указать приоритет выполнения конструкторов вручную? Пишу на System Workbench for STM32 (сборка eclipse) Заранее спасибо за помощь
0
|
||||||||||||||||
| 23.04.2017, 10:04 | |
|
Ответы с готовыми решениями:
27
Порядок вызова конструкторов Порядок вызова конструкторов/деструкторов |
|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
|
| 08.02.2018, 12:25 [ТС] | |
|
Я тоже не люблю зависимость порядка инициализации.
Вообще стиль программирования железа начинается с main и в ней уже идет весь процесс настроек. Там порядок четкий. Но мне предстоит закрывать библиотеку и я хочу оставить main для конечного пользователя чистым без всяких принудительных вызовов init(); Ссылку на проект скинул в личку.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 08.02.2018, 23:10 | |
Сообщение было отмечено beam как решение
Решение
beam, значит так, посмотрел внимательно проект.
Во-первых, следует включить режим сборки Release. Тогда в бинарник не будет добавляться отладочная информация, которая сильно раздувает код + включится необходимая оптимизация. Если отладочная информация необходима, естественно нужно будет ее использовать, но при этом нельзя ориентироваться на размер, который получается с ней. В режиме компиляции Release разница между кодом с использованием локальной статической переменной и без составляет примерно 3.5кб. Во-вторых и в главных, стало понятно почему раздувает код при использовании локальной статической переменной. В С++11 и старше (а именно эта версия действует по умолчанию сейчас) для локальных статических переменных используется механизм гарантирующий отсутствие гонок при инициализации (теоретически и с учетом прерываний МК). Этот механизм не бесплатен. Учитывая возможность того, что оптимизацией этого механизма под конкретную платформу еще никто серьезно не занимался, а также то, что ТС скорее всего даже и не подозревает об этой фиче, я предлагаю ее отключить. Делается это флагом -fno-threadsafe-statics. После чего раздувание кода больше не наблюдается.
1
|
|
| 09.02.2018, 08:49 | |
|
0
|
|
|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
|
| 09.02.2018, 09:24 [ТС] | |
|
У меня при попытке компиляции на релиз отваливаются хидеры. Хз почему, но разбираться я в этом не стал.
Отладочная информация ведь не идет в сам бинарник - это же непосредственно команды ядру. По оптимизации - возможно так и есть. Буду рыть почему отваливается. С++11 я сам включил, т.к. мне нравится его функционал. С потоками все ясно. FreeRTOS только далеко в планах. Про оптимизацию - это да. Я пока не настолько силен, чтобы оптимизировать за рамками синтаксиса. Да, действительно с флагом -fno-threadsafe-statics код уменьшился до обычных размеров. new в свою очередь продолжает отжирать свои 50кб. Возможно он тоже использует какие-то свои фичи. В процессе разработки все больше и больше узнаю разных вещей. Все таки большинство родилось на десктоп системах, которые уже далеко убежали вперед в отличие от embedded систем. Век живи, век учись как говорится... Большое спасибо за помощь! Добавлено через 1 минуту IGPIGP, для синглтона все понятно, я его указал просто как пример обращения.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 09.02.2018, 09:46 | ||
|
Отладочная инфа идет в бинарник и не надо, пожалуйста, с этим спорить. Без отладочной информации бинарник занимает всего 20кб.
1
|
||
|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
|
| 12.02.2018, 15:59 [ТС] | |
|
Очень интересно. Никогда не думал, что в бинарнике есть что-то кроме исполняемых команд. Единственное исключение - знаю, что например j-link debugger умеет "программно" делать много брейк поинтов, но это спец решение.
0
|
|
|
Неэпический
|
||
| 12.02.2018, 16:12 | ||
|
Пример: Поместить в исходник большую строку из файла Вы же видели exe'шники по несколько гигабайт? Это же не команды.
0
|
||
|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
|
| 12.02.2018, 16:33 [ТС] | |
|
ненене, так-то да - это всего лишь объем данных. Там может хоть что быть и 1 рабочая команда loop на себя. Но я имею ввиду не рабочую инфу (исходные данные (не команды), будь то картинки, строки, массивы данных для расчета crc и подобное..), а какую-либо отладочную, не участвующую непосредственно в работе программы.
Добавлено через 2 минуты То есть я всегда думал, что, по крайней мере в контроллерах, отладка производится силами IDE и непосредственно исходного кода. И в памяти мк находится только то, что требуется ему для работы в автономном режиме и ни байта больше.
0
|
|
| 12.02.2018, 16:33 | |
|
Классы, наследование, порядок вызова конструкторов Порядок вызова конструкторов при множественном наследовании Порядок вызова конструкторов при присваивании объектов одного класса
Очерёдность вызова конструкторов класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|