2016-08-19 15 views
1

私も好奇心や注意するが、これを検討してください可能性があります。私は、例えば、いくつかのセクション char buff[128] __attribute__((my_section))に配列を配置する場合
。 そしてリンカスクリプトを使用して、そのセクションを例えば0x10004000番地、 に置くことができますか?&buff[0]は常に0x10004000でしょうか? (私は、ARM Inc.のARMCC(旧RealView)と基本的なGCCツールチェーンとGNU ARMオープンソースを検討しています。)buffオフセットがあるか、最初から埋められているか、ランタイム、リンク、 buffの前に0x10004000にありますか?
また、この状況でCとC++の間に違いはありますか? C++には「バックグラウンドでもっとやるべきこと」があるからです。 :) 私はあなたの知識だけでなく、これに関するあらゆる種類の文書を提供することができます。ELFセクションのパディング

答えて

0

はい、&の場合、buff [0]は常に0x10004000になります。 Keilヘルプファイルの "コンパイラユーザガイド"の第9.46節を参照してください。

文字配列は、c/C++のインラインオブジェクトです。したがって、コンパイラはc/C++で同じことを行います。

+0

これは完全に正しいわけではありません。このセクションに複数のオブジェクトがある場合は、それらがメモリー内に配置される順序が保証されないため、リンカー・スクリプトでアドレスを具体的に設定する必要があります。もちろん、このセクションを予約してこのバッファのみを保存すれば、あなたは良いことです。 –

+0

@ChristopheAugierはい。同じセクションに多くのオブジェクトがある場合は、オブジェクトアドレスを明示的に専用にすることをお勧めします。 –

+0

これは、サブセクションでは必ずしもそうとは限りません。 '.eeprom.my'セクションを作成し、そのセクションが' .eeprom'セクションの開始後100バイトであることをリンカースクリプトから指定すると、リンカは最初に '.eeprom.my'を配置することを決定するかもしれませんこれらの100バイトを使用しない場合は '.eeprom'を使用します。 –

関連する問題