#include <stdio.h>
#include <stdlib.h>
unsigned int adjustSize(size_t size, char *unitchar)
{
const char *units = "\0kMGTPEZY"; //Never too early to prepare!
int loopCount = 0;
while (size >= 1024 && loopCount < 8)
{
size /= 1024;
loopCount ++;
}
if (unitchar) *unitchar = units[loopCount];
return size;
}
int main(int argc, char *argv[])
{
size_t size = 1;
void *buf;
do
{
char unitchar;
unsigned int sizeadj = adjustSize(size, &unitchar);
printf("Allocating %u bytes (%u %cB)...", size
, sizeadj
, unitchar
); if (buf)
{
size *= 2;
}
}
while (buf);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnVuc2lnbmVkIGludCBhZGp1c3RTaXplKHNpemVfdCBzaXplLCBjaGFyICp1bml0Y2hhcikKewoJY29uc3QgY2hhciAqdW5pdHMgPSAiXDBrTUdUUEVaWSI7IC8vTmV2ZXIgdG9vIGVhcmx5IHRvIHByZXBhcmUhCglpbnQgbG9vcENvdW50ID0gMDsKCXdoaWxlIChzaXplID49IDEwMjQgJiYgbG9vcENvdW50IDwgOCkKCXsKCQlzaXplIC89IDEwMjQ7CgkJbG9vcENvdW50ICsrOwoJfQoJaWYgKHVuaXRjaGFyKSAqdW5pdGNoYXIgPSB1bml0c1tsb29wQ291bnRdOwoJcmV0dXJuIHNpemU7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKCXNpemVfdCBzaXplID0gMTsKCXZvaWQgKmJ1ZjsKCglkbwoJewoJCWNoYXIgdW5pdGNoYXI7CgkJdW5zaWduZWQgaW50IHNpemVhZGogPSBhZGp1c3RTaXplKHNpemUsICZ1bml0Y2hhcik7CgkJcHJpbnRmKCJBbGxvY2F0aW5nICV1IGJ5dGVzICgldSAlY0IpLi4uIiwgc2l6ZSwgc2l6ZWFkaiwgdW5pdGNoYXIpOwoJCWJ1ZiA9IG1hbGxvYyhzaXplKTsKCQlpZiAoYnVmKQoJCXsKCQkJcHJpbnRmKCJPS1xuIik7CgkJCWZyZWUoYnVmKTsKCQkJc2l6ZSAqPSAyOwoJCX0KCQllbHNlIHByaW50ZigiRXJyb3IhXG4iKTsKCX0KCQl3aGlsZSAoYnVmKTsKCglyZXR1cm4gMDsKfQo=