显示错误,因为数组大小太大,结构大小太大,文件中定义的全局数据太多。请告诉我如何分配动态内存?
struct
{
doublereal a[25000000];
} _BLNK__;
static doublereal x[22500] /* was [3][7500] */;
static doublereal vn[12], del, eul[22500] /* was [3][1500] */;
答案 0 :(得分:2)
在堆上分配数据,而不是在堆栈上。使用指针并在初始化例程中分配内存。
另外,如果你有足够的内存,可以做一些计算。 25000000 * 16字节=> 400MB的内存。 (不知道doublereal
有多大。)
答案 1 :(得分:0)
尝试使用malloc和指针进行动态内存分配:
typedef struct
{
doublereal a[25000000];
} _BLNK__;
...
{
_BLNK__ *mypointer = malloc(sizeof*mypointer);
mypointer->a[0] = 0;
mypointer->a[1] = 1;
...
free(mypointer);
}
...
答案 2 :(得分:-1)
#include <stdlib.h>
#define LEN_A (25000000)
struct
{
doublereal* a;
}_BLNK__;
#define LEN_X (22500)
#define LEN_VN (12)
#define LEN_EUL (22500)
#define INIT_BLNK(x) x.a=(doublereal*)malloc(LEN_A*sizeof(doublereal))
#define FREE_BLNK(x) if(x.a!=0)free(x.a)
static doublereal *x;
static doublereal *vn,del,*eul;
int main()
{
_BLNK__ Item;
x = (doublereal*)malloc(LEN_X*sizeof(doublereal));
vn = (doublereal*)malloc(LEN_VN*sizeof(doublereal));
eul = (doublereal*)malloc(LEN_EUL*sizeof(doublereal));
INIT_BLNK(Item);
//Do whatever you wish
//Return memory to the OS
free(x);
free(vn);
free(eul);
FREE_BLNK(Item);
return 0;
}
尝试使用此功能。我刚刚在这里编写了代码,所以如果有任何编译器错误,请尝试修复它们
答案 3 :(得分:-1)
声明
doublereal a[25000000];
在堆栈上分配内存。堆栈的大小有严格的限制,你可以通过运行在linux或osx系统上找到它:
$ ulimit -s
8192
是8192K = 8M。
您正尝试在32位系统上分配25000000 * 8 = 200000000
字节= 190 M
,这远远大于限制。
您有三种选择:
1)减小数组的大小
2)动态分配内存(doublereal *a = (doublereal *)malloc(sizeof(doublereal) * 25000000)
)
3)增加堆栈大小(但这需要在该程序将运行的所有计算机上具有管理权限)