ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
9 мая
478113 Топик полностью
fk0, легенда (05.01.2014 21:49, просмотров: 448) ответил VVB на Как я подозревал, всё так как описано в стандарте.
У вас дичайшая каша в голове. Библиотеки содержатся в виде библиотек. Т.е. при компоновке в них находятся нужные функции (отдельные .o файлы в архиве .a библиотеки, содержащие буквально отдельную функцию) и компонуются к проекту. Соответственно, нет никаких проблем добавить в командную строку линкеру своих .o файлов со своими функциями. Или своих библиотек (только с порядком поиска будет небольшая заморочка, тут раньше писали). И не нужно ничего пересобирать. Очевидно же, например, что если определения своих new и delete вставить в файл с main(), то действовать будет на всю программу, в т.ч. на библиотечные функции. STL вообще приплетено ни к месту. Только и это, замена new или malloc, тоже не нужно. В конечном счёте new работает, скорей всего, через malloc. А malloc работает в известных границах от конца bss то brk. Достаточно лишь объяснить C библиотеке где у ней конец bss (метка _end или типа того), и написать функцию sbrk(). И можно сделать такую штуку. Что будет N+M процессов, например. M из них -- критически важные и обойдутся без malloc и т.п. А у остальных N будет malloc, new и т.п. с общей на всех кучей (тут без защиты). FreeRTOS же позволяет при старте процесса указать какие области памяти ему доступны, помимо text и stack. Вот пусть куча будет доступна. И при компиляции все процессов bss должен быть по одному адресу. Если проект собирается как один бинарник, то так и получится автоматом, более того -- bss и rodata тоже придётся сделать общим. M процессов придётся пересобирать отдельно, с вручную назначенными диапазонами адресов для rodata и bss, и потом как-то компоновать с остальными N и с библиотеками (х.з. как, на самом деле, думать надо, не просто, или отдельные библиотеки им, или отказаться вообще, что вряд ли).
[ZX]