>>716もついでに書いてみた。
コンパイルはしたけど実行はしてない。

#include <stdio.h>
#include <stdlib.h>

unsigned int maxAvail()
{
unsigned long n = 1;
char *p;
do {
p = malloc(n);
if (p != NULL) { memset(p, 0, n++); free(p); }
if (n > 4 * 1024 * 1024 * 1024) return 0xFFFFFFFF;
} while (p != NULL);
return --n;
}

int main(void)
{
printf("%d\n", maxAvail());
return 0;
}