0 / 0 / 0
Регистрация: 02.03.2023
Сообщений: 4
|
||||||
1 | ||||||
Инициализация константного массива02.03.2023, 11:17. Показов 615. Ответов 8
Метки нет (Все метки)
Доброго времени суток!
Есть ли какой-нибудь способ/трюк для инициализации константного массива из разных единиц трансляции?
- в массиве array будут следующие значения: [0, 10, 0, 30, 0] - сам массив будет расположен в секции .rodata Зараниее спасибо всем откликнушимся.
0
|
02.03.2023, 11:17 | |
Ответы с готовыми решениями:
8
Инициализация константного поля Инициализация константного вектора списком инициализации Инициализация константного статического объекта - члена класса Инициализация константного члена класса с проверкой значения Как избежать дублирования кода при написании константного и не константного метода? |
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
02.03.2023, 12:27 | 2 |
Bassib, для начала массив нужно сделать extern, чтобы его можно было видеть в других единицах транляции, потому что const дает внутреннее связывание по умолчанию.
Далее нужны уточнения: массив должен иметь значение [0, 10, 0, 30, 0] уже зашитыми в исполняемый файл? Или "инициализация" при запуске тоже допускается?
0
|
0 / 0 / 0
Регистрация: 02.03.2023
Сообщений: 4
|
|
02.03.2023, 12:59 [ТС] | 3 |
DrOffset, да с
extern понятно, упустил. Тут это не главное.Я уточнил про .rodata , т.е. "инициализация при запуске" не допускается. Элементы массива должны сформироваться во время компиляции и в финальном виде попасть в исполняемый файл.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
02.03.2023, 13:07 | 4 |
Думаю, что по крайней мере стандартными средствами, для разных единиц трансляции это сделать невозможно.
0
|
0 / 0 / 0
Регистрация: 02.03.2023
Сообщений: 4
|
|
02.03.2023, 13:49 [ТС] | 5 |
Жаль конечно, если не найдется какого-то трюка. Может у кого-то еще будут мысли.
В любом случае, DrOffset, спасибо за попытку помочь.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
02.03.2023, 13:55 | 6 |
Bassib, думаю, в конкретном компиляторе можно что-то сделать, через нестандартные расширения, ассемблерные вставки и какой-нибудь linker script (как в gcc). Но конкретного рецепта "навскидку" я не выдам.
Может расскажете зачем вам это понадобилось?
0
|
Модератор
|
|
02.03.2023, 14:10 | 7 |
Подозреваю что это для микроконтроллера, например ARM, где rodata не попадёт в ОЗУ, а будет при выполнении прямо из flash памяти читаться. Иначе смысла нет. Соответственно, и спрашивать нужно про конкретный компилятор для конкретного микроконтроллера в разделе про микроконтроллеры.
0
|
0 / 0 / 0
Регистрация: 02.03.2023
Сообщений: 4
|
|
02.03.2023, 14:12 [ТС] | 8 |
Речь про embedded системы. Хотел получить модульность и сэкономить RAM.
Идея заключалась в формировании общей таблицы векторов прерываний, которые бы устанавливались в этой таблице разными "модулями" в разных файлах. Сейчас это обычно делается через weak функции у ручного формирования таблицы, но там жестко фиксируется имя этого обработчика. Возможно несколько сумбурное объяснение, но надеюсь идею Вы поняли
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
02.03.2023, 14:14 | 9 |
Это как раз понятно.
Непонятно было зачем нужно именно один массив из разных единиц трансляции инициализировать.
0
|
02.03.2023, 14:14 | |
02.03.2023, 14:14 | |
Помогаю со студенческими работами здесь
9
Добрый вечер! Передача в функцию константного значения и обьявление им массива инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций. Инициализация константного массива из элементов кортежа Перевод массива комплексных чисел в массив float. Инициализация двумерного массива Инициализация массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |