超过最大允许尺寸(80000000)

时间:2013-01-29 14:11:14

标签: c linker-errors max

  

可能重复:
  LINK : fatal error LNK1248: image size exceeds maximum allowable size (80000000)

#define no_cust 4000
#define no_plant 50  
#define no_sup 2000  
#define No_population 100
#define Iteration 3

struct Output2{
    long double RandomZhj[No_population];
    double Population[No_population];   
    long double result;
    long double cost_sup_to_plant;
    long double velocity[No_population];        
}Zhj[no_sup][no_plant],Whj[no_sup][no_plant],Vhj_t1[no_sup][no_plant];

当我运行程序时,它会显示:

  

致命错误LNK1248:图像尺寸(818D4000)超出最大允许尺寸(80000000)

我想知道如何更正我的计划。

3 个答案:

答案 0 :(得分:7)

不要像这样创建大规模的数组。使用动态分配(即malloc / free代替)。

答案 1 :(得分:2)

这是一个问题。 Windows将静态代码和数据限制为2GB,并且已超出此范围。即使在64位Windows上,无论您拥有多少内存,静态(不可分配)数据的2GB限制仍然存在。

解决方案是将数组从固定边界声明更改为可分配,然后使用ALLOCATE使它们达到所需的大小。如果您使用的是64位系统,则可以使用更大的阵列。但是如果你使用的是32位系统,则不能超过2GB。

您正在尝试分配太多静态内存,而系统无法为您提供这些内存。所以请将您的阵列尺寸缩小。它应该工作。

答案 2 :(得分:2)

结构的尺寸太大。您的操作系统将静态代码和数据限制为80000000(2 GB),并且您已在此处超出此范围。

在程序中使用malloc动态分配,而不是在构建时执行此操作。