|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
||||||||||||||||
Порядок вызова конструкторов23.04.2017, 10:04. Показов 3758. Ответов 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
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 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
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 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 | |
|
Помогаю со студенческими работами здесь
28
Классы, наследование, порядок вызова конструкторов Порядок вызова конструкторов при множественном наследовании Порядок вызова конструкторов при присваивании объектов одного класса
Очерёдность вызова конструкторов класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|