void dwim(unsigned count) { struct Something _buffer[10]; struct Something* buffer; if (count < sizeof(_buffer) / sizeof(_buffer[0])) buffer = _buffer; else { buffer = (struct Something*) malloc(count * sizeof(struct Something)); } doSomething(buffer, count); if (buffer != _buffer) free(buffer); }