Предположим, у меня есть область памяти 128 КБ. В моих директивах компоновщика я разделил этот регион на три части:
- .section_text
- .section_data
- .section_bss
Размер каждого раздела неизвестен перед компиляцией, но я ограничил .section_bss использованием всего оставшегося пространства в области памяти после выделения .section_text и .section_data.
Есть ли способ объявить массив C, который использует все доступное пространство в .region_bss? Предположим, что это единственная вещь, использующая .region_bss, поэтому она может безопасно использовать весь регион. Например, цели, но явно неправильные:
char entire_bss[sizeof(.region_bss)];
Вот мои предварительные ответы на некоторые ожидаемые ответы. Во-первых, я знаю, что sizeof() так не работает. Я просто использую его, чтобы донести идею. Во-вторых, предположим, что это нужно делать с массивом, а не с указателями (решение с помощью указателей возможно и довольно просто). В-третьих, я знаю, что могу получить начальный и конечный адреса .region_bss, но я не знаю, как их использовать для определения размера моего массива. По крайней мере, не так, как это работает в C.
Вполне возможно, что это невозможно сделать, но я надеюсь, что какой-нибудь гений понял это. Дополнительный кредит, если вы можете заставить его работать с набором инструментов Green Hills.