GCC:使用静态数组时避免长时间链接
我的问题实际上是重复的,它问为什么会发生这个问题。我想知道是否有可能避免它 问题是:如果静态分配大量内存:GCC:使用静态数组时避免长时间链接,gcc,Gcc,我的问题实际上是重复的,它问为什么会发生这个问题。我想知道是否有可能避免它 问题是:如果静态分配大量内存: unsigned char static_data[ 8 * BYTES_IN_GYGABYTE ]; 然后链接器(ld)需要很长时间才能生成可执行文件。@davidg对我上面提到的这种行为有一个很好的解释: 这就给我们留下了以下一系列步骤: 汇编程序告诉链接器它需要创建一段1GB长的内存 链接器继续分配内存,准备将其放入最终的可执行文件中 链接器意识到该内存位于.bss节中,并被标
unsigned char static_data[ 8 * BYTES_IN_GYGABYTE ];
然后链接器(ld
)需要很长时间才能生成可执行文件。@davidg对我上面提到的这种行为有一个很好的解释:
这就给我们留下了以下一系列步骤:
更聪明一点
,并且避免上面的步骤2和步骤3
多谢各位
注意:我在Ubuntu上使用GCC4.5.2,您只能在发布版本中分配静态内存:
#ifndef _DEBUG
unsigned char static_data[ 8 * BYTES_IN_GYGABYTE ];
#else
unsigned char *static_data;
#endif
我有两个想法可以帮助你:
-r
)遗憾的是,我不能保证其中一个会有帮助,因为我没有办法进行测试:我的gcc(4.7.2)和bin工具不会显示这种耗时的行为,8、16或32 GB的测试程序会在一秒钟内编译并链接。尝试使用静态全局变量。我稍微澄清了您的问题和标题,因此,读者不必一直读到最后一段来了解问题是什么,或者为什么它不是重复的。希望你不介意。:)@克劳迪奥我确实使用了一个静态全局变量。@jalf非常好的变化。非常感谢。那么您能避免使用静态全局吗?:)malloc不是一个选项?嗯。好主意,但我大大简化了我的代码。实际上,
static\u data
是这样定义的MyStruct static\u data[一维][二维][三维]
Shurly,我可以像MyStruct***static\u data
那样声明它,并在循环中分配所有维度,但我懒得这样做)))为这些数据使用单独的编译单元也会增加编译时间,对吗?我的意思是,如果你把结构放在一个c文件中,然后单独编译它,那就不需要了。我有一个巨大的链接时间。不是编译。是的。。。这个结构存在于单独的cpp文件中。当我尝试向链接器添加-r
选项时,我遇到了与此类似的问题-正如我所看到的,这是一个老问题((博利斯邦:啊,你用C++,就我所记得的,你不应该单独使用-R,而是代替<代码> Ur < /Cord>,不知道它是否有助于这个错误的例子。所以我会把我的钱投入共享的LIB方法。