向系统申请内存!
每次以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;}