128KBのメモリ領域があると仮定します。リンカディレクティブでは、この領域を3つのセクションに分割しました。
- .section_text
- .section_data
- .section_bss
各セクションのサイズはコンパイル前には不明ですが、.section_textと.section_dataが割り当てられた後、メモリ領域内の残りのすべてのスペースを使用するように.section_bssを制限しました。
.region_bssで使用可能なすべてのスペースを使用するC配列を宣言する方法はありますか?リージョン全体を安全に使用できるように、.region_bssを使用しているのはそれだけであると想定します。たとえば、目的はあるが明らかに間違っている:
char entire_bss[sizeof(.region_bss)];
これがいくつかの予想される反応に対する私の事前回答です。まず、sizeof()がこのように機能しないことを私は知っています。私はそれを使ってアイデアを広めています。次に、これはポインターではなく配列を使用して実行する必要があると想定します(ポインターを使用した解決は可能であり、かなり単純です)。第三に、.region_bssの開始アドレスと終了アドレスを取得できることは知っていますが、それらを使用して配列のサイズを決定する方法はわかりません。少なくとも、Cで機能する方法はありません。
これを行う方法はないかもしれませんが、そこにいる天才がそれを理解してくれることを願っています。Green Hillsツールセットで動作させることができる場合は、追加のクレジット。