我在64位Ubuntu盒子上運行以下代碼,並使用18 GB的RAM,正如你所看到的,當我嘗試分配2^31時,對Malloc的調用失敗字節。我不知道爲什麼會發生這種情況,或者如何解決它(我已經嘗試過編譯器標誌和calloc())。我想知道是否有人能向我解釋爲什麼我無法在64位盒子上分配更多空間,以及我如何解決這個問題。Malloc在64位Ubuntu盒子上失敗
#include <stdio.h>
#include <stdlib.h>
//#include "svm_model_matlab.h"
//include "svm.h"
#include <math.h>
struct svm_node
{
int index;
double value;
};
//#define Malloc(type,n) (type *)calloc(n,sizeof(type))
#define Malloc(type,n) (type *)malloc((n)*sizeof(type))
int main()
{
int i;
for(i =25; i< 35; ++i)
{
printf("2^%d %d \n", i,(long int) pow(2,i));
svm_node* x_space = Malloc(struct svm_node,pow(2,i));
printf("the address is %x\n", x_space);
free(x_space);
}
return 0;
}
輸出:
2^25 33554432
the address is 8513e010
2^26 67108864
the address is 6513e010
2^27 134217728
the address is 2513e010
2^28 268435456
the address is a513e010
2^29 536870912
the address is a513e010
2^30 1073741824
the address is 0
2^31 -2147483648
the address is 0
2^32 0
the address is 0
2^33 0
the address is 0
2^34 0
the address is 0
更新:
我發現這個問題我是有:我目前正在運行我的代碼在EC2上一個64位的Ubuntu Linux發行版,默認的Linux EC2上的盒子有0個交換空間。這導致我的進程在請求的任何內存量超過物理RAM的時候會發生故障,因爲它無法進行分頁。在創建交換文件後,我的問題就消失了。
感謝您的幫助
printf(「%d」,sizeof(svm_node))並告訴我們結果 – 2011-02-16 03:51:23
sizeof(svm_node):16 – josephmisiti 2011-02-16 13:41:14