繁体   English   中英

在其他文件中声明/定义c ++结构-使用gcc 4.8.5可以更好地编译?

[英]Declaring/defining c++ struct in different file - better compile time using gcc 4.8.5?

我目前有一个C ++代码和一个Json文件。 Json文件包含二维结构的枚举,因此Json中的每个外键都有一个映射作为其值,即{Outer_key:{{Inner_key:Inner_value},...},...}。 C ++代码包含重载的打印函数,该函数分析输入数据,并且在函数调用过程中,代码使用Outer_key和Inner_key获取Inner_value。 对于c ++ main函数的每次调用,大约检索到0〜10个Inner_value。 但是,整个Json文件映射了大约20,000个Inner_values。

我正在使用python创建c ++代码,并正在使用gcc(CMAKE)进行编译。 我需要在c ++主体中保留某种枚举映射,以便我可以运行c ++代码,获取中间整数值并将其传递给枚举,以最终返回关联的字符串。

现在,我在c ++文件的主要功能中列表初始化了一个2-D unordered_map。 在所有其他编译时初始化中,这花费的时间最短。 但是,仍然需要5〜10分钟。

根据我的建议,我将2-D枚举分为多个(Outer_keys总数)一维结构,将它们存储在不同的文件中,然后在需要时“使用”特定的一维结构。

我在这里有两个问题。

  1. 即使我将它们分割并放入不同的文件中,编译时间也不相同吗?

  2. 如果通过分割成多个一维结构来减少编译时间,我应该采用哪种方法进行编码? 我应该在.h中声明结构,然后在.cpp main()中调用它们吗? 我应该继续在其他.cpp文件中定义结构吗? 我应该只是typedef枚举吗? 另外,在main函数或print函数中,如何仅初始化所需的结构?

.cpp file generated using python below:

void overLoadedPrint (Particular_Datatype *data, std::unordered_map<std::string, std::unordered_map<std::string, std::string>> enumMap) {

   printf("%s", enumMap["SomeKey"][A->member1.innerMember1].c_str());

   //A->member1.innerMember1 returns integer.
   //"SomeKey" is known in python so corresponding key is inputted.
}

int main() {
   std::unordered_map<std::string, std::unordered_map<std::string, std::string>> enumMap = {{"A", {{"1", "a"},{"2", "b"}}...}
   //list-initalize enumMap.
   //compile time significantly increases here.
   //info of this map is stored in a single json file.

   overLoadedPrint(someData, enumMap);

   return 0;
}

  1. 即使我将它们分割并放入不同的文件中,编译时间也不相同吗?

将翻译单元拆分为多个片段通常从头开始增加编译时间。

但是,每个翻译单元都可以单独编译,因此,如果仅更改一个,则仅需要重新编译该文件。 通常,必须编译一部分程序比完全编译它要快得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM