读书人

向系统申请内存!解决思路

发布时间: 2012-04-15 18:39:21 作者: rapoo

向系统申请内存!
每次以16k向系统申请内存, 每次申请到的内存存放为指针记录,,直到申请失败为止,!计算当前申请到的总内存,将申请到的总内存打印出来,然后在将内存释放, 同理再以32k向系统申请内存,也将申请到的总内存打印出来,比较两次申请到的总内存值,看是否相等,!请问大虾如何编写这个程序

[解决办法]
#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;
}
[解决办法]
c++实现。
前面申请了1M个指针,也就是额外占用了4M内存。

C/C++ code
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;}
[解决办法]
这个是C的


C/C++ code
#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;} 

读书人网 >C语言

热点推荐