gpt4 book ai didi

c++ - 在 G++ 中使用 -frepo 选项

转载 作者:太空狗 更新时间:2023-10-29 21:26:22 26 4
gpt4 key购买 nike

我的工作地点是为一些没有虚拟内存的绝对古老的硬件开发代码。正因为如此,我们正在努力尽量减少目标文件和二进制文件的文本大小,这样我们就不会耗尽内存。这可能意味着我们需要限制使用来自 STL 的模板,或者完全禁止它们。在四处寻找最小化文件大小并仍然使用模板的方法时,我遇到了 g++ 的 -frepo 选项。几次测试后,我比开始时更加困惑。当使用 -frepo 时,最终的二进制文件大小相同或更大,这对我来说没有意义。任何人都可以向我解释这个选项的实际作用(除了“它只是工作”,因为这是 GCC 4.7.1 手册中的解释)以及我可能如何滥用它?

使用g++ -c -frepo main.cpp test8.cpp 编译并使用g++ test8.o main.o 链接正在创建 .rpo 文件。

测试8.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;
}

主要.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 并没有好多少,升级编译器也不是一个可行的解决方案。

最佳答案

我建议您忘记 -frepo,它是一个遗迹,几乎没有被使用。

相反,您可以查看用于声明显式实例化的 extern template 语法,以防止模板被隐式实例化,从而允许您控制实例化,使它们只发生在一个地方。为确保您不会遗漏任何内容,您还可以使用 -fno-implicit-templates 进行编译(如果您严格使用 extern template 声明,则没有必要这样做必要的地方。)

关于c++ - 在 G++ 中使用 -frepo 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com