fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. unsigned int adjustSize(size_t size, char *unitchar)
  5. {
  6. const char *units = "\0kMGTPEZY"; //Never too early to prepare!
  7. int loopCount = 0;
  8. while (size >= 1024 && loopCount < 8)
  9. {
  10. size /= 1024;
  11. loopCount ++;
  12. }
  13. if (unitchar) *unitchar = units[loopCount];
  14. return size;
  15. }
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. size_t size = 1;
  20. void *buf;
  21.  
  22. do
  23. {
  24. char unitchar;
  25. unsigned int sizeadj = adjustSize(size, &unitchar);
  26. printf("Allocating %u bytes (%u %cB)...", size, sizeadj, unitchar);
  27. buf = malloc(size);
  28. if (buf)
  29. {
  30. printf("OK\n");
  31. free(buf);
  32. size *= 2;
  33. }
  34. else printf("Error!\n");
  35. }
  36. while (buf);
  37.  
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 3448KB
stdin
Standard input is empty
stdout
Allocating 1 bytes (1 B)...OK
Allocating 2 bytes (2 B)...OK
Allocating 4 bytes (4 B)...OK
Allocating 8 bytes (8 B)...OK
Allocating 16 bytes (16 B)...OK
Allocating 32 bytes (32 B)...OK
Allocating 64 bytes (64 B)...OK
Allocating 128 bytes (128 B)...OK
Allocating 256 bytes (256 B)...OK
Allocating 512 bytes (512 B)...OK
Allocating 1024 bytes (1 kB)...OK
Allocating 2048 bytes (2 kB)...OK
Allocating 4096 bytes (4 kB)...OK
Allocating 8192 bytes (8 kB)...OK
Allocating 16384 bytes (16 kB)...OK
Allocating 32768 bytes (32 kB)...OK
Allocating 65536 bytes (64 kB)...OK
Allocating 131072 bytes (128 kB)...OK
Allocating 262144 bytes (256 kB)...OK
Allocating 524288 bytes (512 kB)...OK
Allocating 1048576 bytes (1 MB)...OK
Allocating 2097152 bytes (2 MB)...OK
Allocating 4194304 bytes (4 MB)...OK
Allocating 8388608 bytes (8 MB)...OK
Allocating 16777216 bytes (16 MB)...OK
Allocating 33554432 bytes (32 MB)...OK
Allocating 67108864 bytes (64 MB)...OK
Allocating 134217728 bytes (128 MB)...OK
Allocating 268435456 bytes (256 MB)...OK
Allocating 536870912 bytes (512 MB)...OK
Allocating 1073741824 bytes (1 GB)...Error!