簡體   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