私の職場では、仮想メモリを持たない完全に古いハードウェアのコードを開発しています。このため、メモリ不足にならないように、オブジェクト ファイルとバイナリ ファイルのテキスト サイズを最小限に抑えるように注意を払っています。これはおそらく、STL からのテンプレートの使用を制限するか、完全に禁止する必要があることを意味します。ファイルのサイズを最小限に抑えながらテンプレートを使用する方法を探しているときに、-frepo
g++ のオプションを見つけました。いくつかのテストの後、私は始めたときよりもさらに混乱しています. -frepo を使用すると、最終的なバイナリ ファイルのサイズは同じかそれ以上になりますが、これは意味がありません。このオプションが実際に何をするのか(GCC 4.7.1マニュアルの説明であるため、「機能する」以外)、どのように悪用しているのかを誰かに説明できますか?
コンパイルg++ -c -frepo main.cpp test8.cpp
およびリンクg++ test8.o main.o
.rpo ファイルが作成されています。
test8.h:
#include <list>
using namespace std;
class Test
{
public:
Test ();
list<int> makeNewIntList ();
private:
list<int> intList;
};
test8.cpp:
#include "test8.h"
#include <list>
using namespace std;
Test::Test()
{
intList = list<int>( 10, 12 );
}
list<int> Test::makeNewIntList()
{
intList.push_back(4);
return intList;
}
main.cpp
#include "test8.h"
using namespace std;
void findFive (int num);
list<int> makeIntList();
int main( int argc, char* argv[])
{
Test test;
list<int> intList = test.makeNewIntList();
list<int> intList2 = makeIntList();
list<float> floatList = list<float> (10,12);
floatList.push_back(5);
}
list<int> makeIntList()
{
list<int> intList = list<int> (10,12);
return intList;
}
GCC 4.1.2 を使用しています。また、GCC 4.7.0 はそれほど優れているわけではなく、コンパイラのアップグレードは実行可能な解決策ではないことに注意してください。