排他的に使用する変数を同じアドレスに配置する
テクニカル・ノート 181236J
アーキテクチャ:
All
コンポーネント:
compiler
更新日:
2019/02/18 9:24
はじめに
本テクニカルノートでは、排他にしか使用しない変数を同じアドレスに割り当ててメモリ使用量を節約したい場合の、いくつかの方法を説明します。
解説
1 C言語のunionを使う方法
変数宣言をunion{};で囲むことで、同じアドレスに割り当てられます。
例)
2つの変数a, bは同じアドレスに割り当てられる
union {
int a;
int b;
};
2 リンカ―のoverlayを使う方法
アドレスを共有したい変数にセクションを指定し、リンカ設定ファイルにてoverlayで同じ領域を共有させる。
例)
(1) Cプログラム中で、同じアドレスを共有させたい変数に別々のセクションを割り当てる。
#pragma location=”aaa”
__root int a;
#pragma location=”bbb”
__root int b;
(2) リンカ設定ファイルにoverlay宣言を追加する
define overlay mmm { section aaa };
define overlay mmm { section bbb };
(3) overlayをリージョンに割り当てる
place in RAM_region { readwrite, overlay mmm};
3 malloc/freeを使う方法
同じアドレスになるとは限らないが、同じ領域を再利用することができる。
func1(..) {
int *a = (int *)malloc(sizeof(int));
<aを使う処理>
free(a); //aを使い終わった
}
func2(..) {
int *b = (int *) malloc(sizeof(int));
<bを使う処理>
free(b); //bを使い終わった
}
まとめ
上記のような方法で、メモリ使用量を節約しながらコーディングを行うことが可能です。
全ての製品名は、それぞれの所有者の商標または登録商標です