向系统申请内存!

大爱_无疆 2012-04-11 02:36:46
每次以16k向系统申请内存, 每次申请到的内存存放为指针记录,,直到申请失败为止,!计算当前申请到的总内存,将申请到的总内存打印出来,然后在将内存释放, 同理再以32k向系统申请内存,也将申请到的总内存打印出来,比较两次申请到的总内存值,看是否相等,!请问大虾如何编写这个程序
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
matrixcl 2012-04-11
  • 打赏
  • 举报
回复
这个是C的



#include <stdio.h>
#include <memory.h>

char *(* points) = NULL;
void GetMemory(int blockSize)
{
char *pTmp = NULL;
int pos = 0;
int i;
while(1)
{
pTmp = (char *)malloc(blockSize);

if (pTmp != NULL)
{
points[pos] = pTmp;
pos++;
}
else
{
printf("blockSize = %d, 成功申请到 %d bytes内存\n", blockSize, blockSize * pos);
break;
}
}

for(i=0; i<pos; i++)
{
free(points[i]);
}
}

int main()
{
points = (char **)malloc(1024*1024*sizeof(char *));
GetMemory(1024*16);
GetMemory(1024*32);
free(points);
return 0;
}



PS: 2楼代码末尾要释放 points
matrixcl 2012-04-11
  • 打赏
  • 举报
回复
c++实现。
前面申请了1M个指针,也就是额外占用了4M内存。

int main()
{
char *(* points) = new char *[1024*1024];

int pos = 0;
while(1)
{
try
{
points[pos] = new char[1024*16];
pos++;
}
catch (...)
{
printf("1. 成功申请到%d KB内存\n", 16 * pos);
break;
}
}

for(int i=0; i<pos; i++)
{
delete [] points[i];
}

pos = 0;
while(1)
{
try
{
points[pos] = new char[1024*32];
pos++;
}
catch (...)
{
printf("2. 成功申请到%d KB内存\n", 32 * pos);
break;
}
}

for(int i=0; i<pos; i++)
{
delete [] points[i];
}

return 0;
}
evencoming 2012-04-11
  • 打赏
  • 举报
回复
#define TOTAL_MOMERY (2*1024*1024*1024)
unsigned int total=0;
unsigned int get_memory(int block)
{
int i,m,n=TOTAL_MOMERY/block;
void*addr=malloc(n*4);
total+=n*4;
for(i=0;i<n;i++)
if(addr[i]=malloc(block));
else break;
m=i;
printf("block:%d\ttotal:%d\n",total+i*block);
for(i=0;i<m;i++)
free(addr[i]);
return total+i*block;
}
int main()
{
if(get_memory(16*1024)==getmemory(32*1024))
puts("equal");
else puts("not equal");
return 0;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧