将非常大的表包含到代码中的正确方法是什么? С++

问题描述 投票:0回答:1

我的代码中有非常大的哈希表,它们用于计算。现在这两个表是一个包含 5,000,000 个 float 类型的数组。可能会有更多桌子,尺寸更大。

当我将它们包含在代码中时,Clion 开始变慢很多,语法突出显示停止工作。但它们存储在一个单独的文件中,并像这样包含#include“table1.h”。

此刻的我是这样的:

namespace ns{

    class Calc{ 
    public:
        Calc() {}
        static float table1[5000000];
        static float table2[5000000];
    private:
    };
}

我知道公开它们不是一个好主意,但现在为了方便我这样做了,然后我会将它们移至私有。 并且表本身在文件 table1.h 和 table2.h 中单独声明,如下所示:

#include "Calc.h"
float ns::Calc::table1[5000000] = {.../*here initialization*/...};

我有几个问题:

  1. 如何正确地将它们包含到代码中,以便 Clion 不会分析它们,并且这些文件在编译之前不会以任何方式进行分析。也许它们应该从类中取出并设为全局变量?无论如何,它们都是静态的。

  2. 如果其中一些表是 const,如何对 const 数组执行相同操作。

重要。提供建议,考虑到我是初学者,请尽量使信息尽可能容易理解。但我将非常感谢任何帮助,并且会理解任何答案。我将对有关处理大量数据的任何信息感兴趣。

c++ arrays bigdata hashtable clion
1个回答
0
投票

根本不要将它们放在头文件中,只需将数组的声明放在其中即可。将实际内容保存在编译一次的常规目标文件 (

.cpp
) 中。这应该会让您的 IDE(尤其是您的编译器)更加满意。

因此,不要将定义放在可能包含在各处的头文件中,而是使用像

table1.cpp
这样的文件,其内容完全相同,但不会包含在任何地方:

#include "Calc.h"
float ns::Calc::table1[5000000] = {.../*here initialization*/...};
© www.soinside.com 2019 - 2024. All rights reserved.