#include #include #include int main(void) { size_t bytes = 0, add = UINT_MAX; void *v = NULL; for (; add > 0 && NULL == v; add /= 2) { if (NULL != (v = malloc(bytes + add))) { free(v), v = NULL; bytes += add; printf("added %10u bytes, %10u total...\n", add, bytes); } } return 0; } #if 0 $ ./totalmem added 536870911 bytes, 536870911 total... added 134217727 bytes, 671088638 total... added 67108863 bytes, 738197501 total... added 1048575 bytes, 739246076 total... added 131071 bytes, 739377147 total... added 65535 bytes, 739442682 total... added 32767 bytes, 739475449 total... added 16383 bytes, 739491832 total... added 4095 bytes, 739495927 total... added 2047 bytes, 739497974 total... added 1023 bytes, 739498997 total... added 511 bytes, 739499508 total... added 255 bytes, 739499763 total... added 127 bytes, 739499890 total... added 31 bytes, 739499921 total... added 15 bytes, 739499936 total... added 3 bytes, 739499939 total... added 1 bytes, 739499940 total... #endif