【问题标题】:Parallel compile a huge C file (preferrably with gcc)并行编译一个巨大的 C 文件(最好用 gcc)
【发布时间】:2012-10-03 18:51:40
【问题描述】:

我有一个巨大的 C 文件。在文件中,有一个巨大的结构(~> 100 万行)。有没有办法使用额外的内核并行编译这个文件?

编辑:抱歉,在查看了我的代码和我的问题之后,真正的大事不是“结构”,而是结构数组......

【问题讨论】:

  • 一百万行代码?这是一个巨大的结构。
  • 我认为没有。并行编译(预处理、令牌解析、语义处理、代码生成、优化)不容易并行化。这与将一名九个月内分娩的女性重构为九名女性一个月内分娩的问题非常相似。
  • 听起来像是DailyWTF 候选人。
  • 调试这一定是最大的痛苦。说真的:你做错了。
  • 我试图准确地想象需要一百万个不同的变量名称,它们将是什么,以及它们将如何使用。尽我所能,我就是做不到!我很想看到一个 50 行的结构示例。

标签: c gcc compilation


【解决方案1】:

如果是超过 100 万行的 struct 定义,那么你可能不走运。

但是,如果您要声明一个结构变量,它是一个多行结构类型的数组(或者不是一个数组,而只是一个非常大的结构),那么我建议将变量声明放在一个单独的 .c 文件中本身并在需要访问它的任何其他 c 文件中使用 extern 关键字。这样它只需要在它发生变化时重新编译。

例如,如果您有以下情况:

//Filename: onefile.c

struct _bigStruct{
  int type;
  char *name;
}bigStruct[] = {
  {  1, "One" },
  {  2, "Two" },
  {  3, "Three" },
  {  4, "Four" },
  ...
};

int someFunction(int j, int x)
{
  if (j == bigStruct[x])
     //do something
}

那我就改成下面这样:

//Filename: bigstruct.h
struct _bigStruct{
  int type;
  char *name;
};

//Filename: bigstruct.c
struct _bigStruct bigStruct[] = {
{  1, "One" },
{  2, "Two" },
{  3, "Three" },
{  4, "Four" },
...
};

//Filename: main.c
#include "bigstruct.h"

extern struct _bigStruct bigStruct[];

int someFunction(int j, int x)
{
  if (j == bigStruct[x].type)
     //do something
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2021-06-03
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多