|
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
|
||||||||||||||||
Порядок вызова конструкторов23.04.2017, 10:04. Показов 4088. Ответов 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
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 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
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 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 | |
|
Классы, наследование, порядок вызова конструкторов Порядок вызова конструкторов при множественном наследовании Порядок вызова конструкторов при присваивании объектов одного класса
Очерёдность вызова конструкторов класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|