测试主机内存程序,申请第8个100M内存时失败(每次100M),但这个测试程序又可以起好几个,每个都是申请第8个100M失败?
eng 2003-08-25 11:21:22 测试主机内存程序,申请第8个100M内存时失败(每次100M),但这个测试程序又可以起好几个,每个都是申请第8个100M失败?
why?
aix 5 + gcc 物理内存 2G
ulimit -a 全部unlimited
是不是系统对每个进程申请的内存资源有限制,在那个地方设置?
我有个程序要申请1G以上,但每次都800M时,申请失败,因此我写个测试程序,但测试程序又可以起好几个,就是说在一个程序申请不到内存时,其他程序还可以申请到,why? 如何解决,请各位帮忙!
附:测试源码
#include <stdio.h>
/*100M*/
typedef struct
{
char buf[104857600];
}UNIT;
typedef struct node_100M
{
UNIT item;
struct node_100M * next;
}NODE;
/*申请内存,n为节点个数,每个节点为100M*/
NODE* Apply_Mem(NODE ** xx,int n)
{
NODE* pCurrent;
char err_text[512];
int i;
pCurrent=(NODE*)malloc(sizeof(NODE));
if(pCurrent==NULL)
sprintf(err_text,"第1次申请客户主表内存失败!");
else
sprintf(err_text,"第1次申请客户主表内存成功!");
printf("%s\n",err_text);
*xx=pCurrent;
for(i=1;i < n;i++)
{
pCurrent->next=(NODE*)malloc(sizeof(NODE));
if(pCurrent->next==NULL)
{
sprintf(err_text,"第%d次申请客户主表内存失败!",i+1);
printf("%s\n",err_text);
return(NULL);
}
else
{
sprintf(err_text,"第%d次申请客户主表内存成功!",i+1);
printf("%s\n",err_text);
}
pCurrent=pCurrent->next;
}
return pCurrent;
}
void dis_xx(NODE ** xx)
{
NODE *p,*q;
int i=0;
p = *xx;
*xx=NULL;
printf("开始释放内存!\n");
while(p!=NULL)
{
q=p->next;
free(p);
printf("第%d次释放100M!\n",i+1);
p=q;
i++;
}
return ;
}
/*检查是否内存泄漏*/
int MemCheck(int begin)
{
static char *saved=NULL;
/*char *p = new char[4];*/
char *p;
p=(char*)malloc(4*sizeof(char));
if (begin)
{
saved = p;
/*delete p;*/
free(p);
} else
if (p != saved) {
return (p - saved);
}
return 0;
}
int main()
{
int i=0;
NODE a;
NODE* xx;
printf("测试小型机可分配内存数:\n\n");
printf("size of 分配单位 is %d M\n\n",sizeof(a)/1024/1024);
MemCheck(0);
if(Apply_Mem(&xx,8)==NULL)
{
printf("分配内存信息失败!\n");
}
printf("please enter then any key to release the memory...\n\n");
getchar();
dis_xx(&xx);
i=MemCheck(1);
printf(" i is :%d\n",i);
printf("结束!\n");
return 1;
}