一直不怎么用malloc,但是知道malloc申请的是虚拟地址空间。刚好自己的机器是64位的,所以写了个程序做个测试。
代码原理很简单,建立链表,将申请到的空间都存起来。申请到最大之后,再逐一进行释放。
#include <stdio.h>
#include <stdlib.h>
#define M_500M (500 * 1024 * 1024)
typedef struct list {
struct list *prev;
void *mem;
} list;
list *head;
list *cur;
int count = 0;
int max = 0;
void malloc_mem()
{
list *p = NULL;
do {
p = (list *)malloc(sizeof(list));
if (p == NULL) {
max = count;
return;
}
p->prev = cur;
p->mem = malloc(M_500M);
if (p->mem == NULL) { // Malloc failed
free(p);
max = count;
return;
}
count++;
// printf("malloc count %d, malloc addr %p\n", count, p->mem);
cur = p;
} while (1);
}
void free_mem()
{