.ANY セクションの配置アルゴリズムの使用例

ここでは、sections.oRO-CODE セクションを例に、配置アルゴリズムの動作を説明します。

入力セクションのプロパティと順序を以下の表に示します。

Table 10. 入力セクションのプロパティ

名前サイズ
sec10x4
sec20x4
sec30x4
sec40x4
sec50x4
sec60x4

この例で使用するスキャッタファイルは次のとおりです。

LR 0x100
{
  ER_1 0x100 0x10
  {
     .ANY
  }

  ER_2 0x200 0x10
  {
     .ANY
  }
}

Note

例では、--any_contingency を無効にしています。

Show/hidefirst_fit、next_fit、best_fit の例

この例では、同じサイズの複数のセクションを、同じセレクタで 2 つの領域に割り当てる状況を考えます。 セレクタは等しく限定的で、.ANY(+R0) に相当します。優先順位は設定されていません。

    Execution Region ER_1 (Base: 0x00000100, Size: 0x00000010, Max: 0x00000010, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000100   0x00000004   Code   RO            1    sec1                sections.o
    0x00000104   0x00000004   Code   RO            2    sec2                sections.o
    0x00000108   0x00000004   Code   RO            3    sec3                sections.o
    0x0000010c   0x00000004   Code   RO            4    sec4                sections.o


    Execution Region ER_2 (Base: 0x00000200, Size: 0x00000008, Max: 0x00000010, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000200   0x00000004   Code   RO            5    sec5                sections.o
    0x00000204   0x00000004   Code   RO            6    sec6                sections.o

この例では、以下のようになります。

  • first_fit の場合、リンカはまず、すべてのセクションを ER_1 に割り当ててから、次に利用可能な領域である ER_2 に移ります。

  • next_fit の場合も、リンカの動作は基本的には first_fit と同じです。 ただし、ER_1 が一杯になると、この実行領域は FULL としてマークされ、それ以降、考慮されることはありません。 この例では、ER_1 は一杯です。 そのため、ER_2 が考慮されます。

  • best_fit の場合、リンカは、sec1ER_1 に割り当てます。 この時点で優先順位も限定性も等しい 2 つの領域が存在しますが、残っているスペースは ER_1 の方が少なくなりました。 このとき、リンカは、sec2ER_1 に割り当て、ER_1 が一杯になるまでセクションを割り当て続けます。

Show/hideworst_fit の例

この例は、worst_fit アルゴリズムを使用した場合のイメージのメモリマップを示しています。

    Execution Region ER_1 (Base: 0x00000100, Size: 0x0000000c, Max: 0x00000010, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000100   0x00000004   Code   RO            1    sec1                sections.o
    0x00000104   0x00000004   Code   RO            3    sec3                sections.o
    0x00000108   0x00000004   Code   RO            5    sec5                sections.o


    Execution Region ER_2 (Base: 0x00000200, Size: 0x0000000c, Max: 0x00000010, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000200   0x00000004   Code   RO            2    sec2                sections.o
    0x00000204   0x00000004   Code   RO            4    sec4                sections.o
    0x00000208   0x00000004   Code   RO            6    sec6                sections.o

リンカはまず、sec1ER_1 に割り当てます。 この時点で、優先順位も限定性も等しい 2 つの領域が存在します。 リンカは、空きスペースに最も余裕のある領域(この例で ER_2)に sec2 を割り当てます。 今度は、2 つの領域の空きスペースが等しくなりました。このとき、リンカは、スキャッタファイル内で先に出現する領域(ER_1)に sec3 を割り当てます。

Note

worst_fit の動作は、現バージョンのリンカのデフォルトの動作であり、以前のバージョンのリンカで唯一利用できるアルゴリズムです。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612